利用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 () ;
}
}
}