Java网络编程UDP实现多线程在线聊天

本文实例为大家分享了Java实现多线程在线聊天的具体代码,供大家参考,具体内容如下

上一篇博客通过UDP实现了聊天,但只能单方面发送消息,这次实现了多线程在线聊天,也就是可以双方互发消息。

发送消息:

package com.kuang.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable {
    DatagramSocket socket = null;
    BufferedReader reader = null;

    private int fromPort;
    private String toIP;
    private int toPort;

    public TalkSend(int fromPort, String toIP, int toPort) {
        this.fromPort = fromPort;
        this.toIP = toIP;
        this.toPort = toPort;

        try {
            socket = new DatagramSocket(fromPort);
            reader = new BufferedReader(new InputStreamReader(System.in));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true) {
            try {
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));

                socket.send(packet);
                if (data.equals("bye")) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

接收消息:

package com.kuang.chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable {
    DatagramSocket socket = null;
    private int port;
    private String msgFrom;

    public TalkReceive(int port,String msgFrom) {
        this.port = port;
        this.msgFrom = msgFrom;
        try {
            socket = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {

        while (true) {
            try {
                //准备接收数据
                byte[] container = new byte[1024];
                DatagramPacket packet = new DatagramPacket(container,0,container.length);
                socket.receive(packet);//阻塞式接受包裹

                //断开连接 bye
                byte[] data = packet.getData();
                String receiveData = new String(data,0,data.length);

                System.out.println(msgFrom + ":" +receiveData);
                if (receiveData.equals("bye")) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

用户1:学生

package com.kuang.chat;

public class TalkStudent {
    public static void main(String[] args) {
        //开启两个线程
        new Thread(new TalkSend(7777,"localhost",9999)).start();
        new Thread(new TalkReceive(8888,"老师")).start();
    }
}

用户2:老师

package com.kuang.chat;

public class TalkTeacher {
    public static void main(String[] args) {
        new Thread(new TalkSend(5555,"localhost",8888)).start();
        new Thread(new TalkReceive(9999,"学生")).start();
    }
}

运行结果:

1、启动学生端,开始运行

2、启动教师端,开始运行

3、学生发送消息,教师收到

4、教师发送消息,学生收到

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java多线程实现多人聊天室功能

    本文为大家分享了Java多线程实现多人聊天室功能的具体代码,供大家参考,具体内容如下 1.实验目的: 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗口标题是 "欢迎使用 XXX 聊天室应用",其中 XXX 是自己的班级姓名学号,如"软件 171 张三 1234". 2.实验代码: 服务端程序代码: ServerChar.java package works; import java.io.DataInputStream; impor

  • Java多线程实现聊天客户端和服务器

    本文实例为大家分享了java聊天室代码,供大家参考,具体内容如下 主要涉及知识 ·Java中GUI程序的编写,包括事件监听机制. ·Java的网络通信编程,ServerSocket,Socket类的使用. ·Java中多线程的编程,Thread类,Runnable接口的使用. 源代码 客户端 package project1; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; impo

  • 基于Java网络编程和多线程的多对多聊天系统

    1.前言 程序实现基于星型结构(服务器接收来自各个客户端发送的信息,然后将信息传递给其他客户端界面并在其他客户端界面显示发送的信息) 2.类图 3.代码 客户端代码: package netProgram; import java.io.IOException; import java.net.Socket; import java.net.SocketAddress; public class Client implements ScreenInputInterface{ private So

  • Java网络编程实现多线程聊天

    本文实例为大家分享了Java网络编程实现多线程聊天的具体代码,供大家参考,具体内容如下 聊天程序如果是单线程,会导致没人只能说一句,并且说了以后,必须等到另一个人的回复,才能说第二句.收发都在主线程中,不能同时进行. 解决方法: 将收发放到两个不同的线程 1. SendThread 发送消息线程 2. RecieveThread 接受消息线程 3. Server一旦接受到连接,就启动收发两个线程 4. Client 一旦建立了连接,就启动收发两个线程 多线程聊天 1 SendThread pac

  • Java实现多线程聊天室

    本文实例为大家分享了Java实现多线程聊天室的具体代码,供大家参考,具体内容如下 用多线程来实现,功能会比单线程聊天室更加齐全,也更人性化一点. 多线程版本的聊天室 1. 功能分析: 实现用户注册,上线,下线 实现群聊和私聊 统计当前在线人数 2. 服务端实现 1.维护所有的在线用户 2.注册功能:客户端名称,添加到服务器的客户端集合里 3.群聊功能:客户端发送消息,所有的客户端都能接收到 4.私聊功能:客户端与指定客户端进发送和接收消息 5.退出功能: 从服务器客户端集合中移除客户端 3. 客

  • Java多线程局域网聊天室的实现

    局域网聊天室 在学习了一个学期的java以后,觉得java真是博大精深,彻底放弃了因为c++而轻视java的心态,搞了一个多线程的聊天室,熟悉了一下服务器和客户机的操作. 1.TCP 要实现局域网连接,就必须知道信息传输的原理. 在局域网里面传输的信息都是以包的形式,我使用的TCP包传输数据,TCP包里面封装了IP报文. 下面这句话就是通过一个静态IPV4协议的类得到一个服务器的IP地址. address = InetAddress.getByName("192.168.43.86")

  • java基于C/S结构实现多线程聊天室

    本文实例为大家分享了java基于C/S结构实现多线程聊天室的具体代码,供大家参考,具体内容如下 主要实现的功能: 服务器端建立ServerSocket阻塞监听来自客户端的Socket连接,并为之开辟一个新的线程 读取来自该连接的数据,广播每一个客户端数据,这里简单地使用一个链表保存所有来自客户端的所有Socket连接 客户端连接上服务器端后主要有两个线程在工作: 主线程:不断获取键盘的输入并写入该Socket中传输给服务器 副线程:不断从服务器Socket流中读取传来的数据,打印到屏幕上. 服务

  • Java网络编程UDP实现多线程在线聊天

    本文实例为大家分享了Java实现多线程在线聊天的具体代码,供大家参考,具体内容如下 上一篇博客通过UDP实现了聊天,但只能单方面发送消息,这次实现了多线程在线聊天,也就是可以双方互发消息. 发送消息: package com.kuang.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket;

  • Java网络编程实例——简单模拟在线聊天

    1.前提知识 需要知道简单的IO流操作,以及简单的UDP发送数据包的原理. 需要用到的类:DatagramSocket.DatagramPacket UDP数据包基于DatagramSocket发送和接收,DatagramPacket用于封装数据包 看下案例: 客户端发送消息: 正常情况下从控制台读信息,封装到DatagramPacket之中,再由DatagramSocket的send方法发出 读取到bye的时候退出聊天 public class UdpOnlineClient { public

  • Java网络编程UDP实现消息发送及聊天

    TCP可以实现聊天,UDP也可以实现消息发送及聊天.不同的是,TCP需要有服务端和客户端的连接,但UDP不需要,只需要有发送方和接收方即可. 一.实现消息发送 发送方: package com.kuang.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; //不需要连接服务器

  • Java网络编程UDP协议发送接收数据

    本文实例为大家分享了Java网络编程UDP协议发送接收数据的具体代码,供大家参考,具体内容如下 UDP协议发送数据步骤 A:创建发送端socket对象: B:创建数据,并把数据打包: C:调用socket对象的发送方法发送数据包: D:释放资源 package net; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAd

  • Java网络编程之简易聊天室的实现

    目录 一.题目描述 二.解题思路 三.代码详解 一.题目描述 题目实现:运行客户端,连接服务器. 二.解题思路 首先需要启动上题的ServerSocketFrame服务,这样客户端运行时,才能连接上服务器. 创建一个类:ClientSocketFrame,继承JFrame 通过Socket类创建到指定服务器和端口的套接字对象. 实例化Socket对象 socket = new Socket("127.0.0.1", 9527); // 127.0.0.1 代表的是本地IP 三.代码详解

  • 老生常谈Java网络编程TCP通信(必看篇)

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务.Socket和ServerSocket类位于java.net包中.ServerSocket用于服务端,Socket是建立网络连接时使用的.连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话. Socket常用方法: -int getLocalP

  • Java 网络编程总结

    目录 1.IP地址 2.端口 3.通信协议 3.1 TCP/IP协议簇:实际上是一组协议 3.2 TCP UDP对比 3.3 TCP实现聊天 3.4 TCP文件上传 3.5 UDP消息发送 3.6 UDP聊天实现 1.IP地址 IP地址IntAddress: 唯一定位一台网络上的计算机 127.0.0.1:本地localhost IP地址的分类 ipV4/ipV6 ipV4:127.0.0.1,4个字节组成:0~255,42亿~:30亿都在北美,亚洲4亿:2011年就用完了 ipV6:128位.

  • java网络编程基础知识介绍

    网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层 ------------ IP(网络之间的互联协议) 传输层 ------------ TCP(传输控制协议).UDP(用户数据报协议) 应用层 ------------ Telnet(Internet远程登录服务的标准协议和主要方式).FTP(文本传输协议).HTTP(超文本传送协议) 3.IP地址和端口号 1.ip地址用于

随机推荐