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

网友投稿 246 2022-10-14


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 {

DataxURXOGlLgramSocket 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、教师发送消息,学生收到


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:混合双向无线传输装置助力智能工厂建设
下一篇:#yyds干货盘点# TCP 复位攻击
相关文章

 发表评论

暂时没有评论,来抢沙发吧~