UDP实现实时聊天

package com.studying.JavaNet.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 datagramSocket=null;
BufferedReader bufferedReader=null;
private int toPort;//对方的ip和端口号
private String toIP;
private int fromPort;
public TalkSend(int toPort, String toIP, int fromPort) {
this.toPort = toPort;
this.toIP = toIP;
this.fromPort = fromPort;
try {
datagramSocket = new DatagramSocket(fromPort);
bufferedReader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true)//循环发送
{
try {
String data = bufferedReader.readLine();
byte[] datainf = data.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(datainf,0,datainf.length,new InetSocketAddress(this.toIP,this.toPort));
datagramSocket.send(datagramPacket);
if (data.equals("bye"))
{
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
datagramSocket.close();
}
}
package com.studying.JavaNet.Chat;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TalkReceive implements Runnable{
DatagramSocket datagramSocket=null;
private int port;
private String msgFrom;
public TalkReceive(int port,String msgFrom) {
this.port = port;
this.msgFrom=msgFrom;
try {
datagramSocket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true)
{
try {
byte[] container = new byte[1024];//接收
DatagramPacket datagramPacket = new DatagramPacket(container,0,container.length);
datagramSocket.receive(datagramPacket);//阻塞式接收包裹
//断开
byte[] data = datagramPacket.getData();
String recdata= new String(data, 0, data.length);
System.out.println(msgFrom+":"+recdata);
if (recdata.equals("leaving"))
{
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
datagramSocket.close();
}
}
package com.studying.JavaNet.Chat;
public class TalkUserone {
public static void main(String[] args) {
//开启两个线程
new Thread(new TalkSend(22,"localhost",33)).start();//设立自己的发送端口和到达端口
new Thread(new TalkReceive(2233,"UserOne")).start();//设立自己的接收端口
}
}
package com.studying.JavaNet.Chat;
public class TalkUserOther {
public static void main(String[] args) {
new Thread(new TalkSend(2233,"localhost",1215)).start();
new Thread(new TalkReceive(22,"UserTwo")).start();
}
}
//师从狂神,仅供学习使用,未经允许不得转载