利用UDP協議向指定的人發送數據包,並且啓用另外一個線程用於接收數據包,完成多人聊天功能
package UDPtest;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
/**
* Created by fushuang on 2016/8/17.
*/
public class UdpChatUtil {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入對方的IP地址:");
String ip=scanner.next();
System.out.println("請輸入socket所使用的端口:");
int mport=scanner.nextInt();
System.out.println("請輸入對方端口:");
int yport=scanner.nextInt();
try {
DatagramSocket socket = new DatagramSocket(mport);
InetAddress target = InetAddress.getByName(ip);
//開啓一個接收線程
new Thread(()->{
byte[] bytes = new byte[2048];
DatagramPacket packet = new DatagramPacket(bytes,bytes.length); //新建一個空的數據包
while (true){
try {
socket.receive(packet); //把接收到的數據放入數據包裏
String address = packet.getAddress().getHostAddress(); //這時獲取到的是對方的ip ,不知道啥時候發生的ip變換,
int port = packet.getPort();
byte[] data = packet.getData();
System.out.println("收到來自 :"+address +" 端口 :"+port +" 的信息 : "+new String(data,0,data.length,"UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
//主線程用於發送
while (true){
String s = scanner.next();
if( s.equals("exit")) {
break;
}
byte[] bytes = s.getBytes("UTF-8");
DatagramPacket packet = new DatagramPacket(bytes, bytes.length); //傳入byte數組和他的長度新建數據包
packet.setAddress(target);
packet.setPort(yport); //設置發送到接收人的端口號
socket.send(packet);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}