UDP實現(xiàn)實時聊天

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)//循環(huán)發(fā)送
? ? ? ?{
? ? ? ? ? ?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();//設立自己的發(fā)送端口和到達端口
? ? ? ?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();
? ?}
}
//師從狂神,僅供學習使用,未經(jīng)允許不得轉(zhuǎn)載