发送端:
/*
* UDP通信方式,发送端不用管接收端是否存在(在线),都可以进行发送
*/
public class UDPSend {
public static void main(String[] args) throws IOException{
//通过InetAddress类静态方法,传入目标IP地址,获取目标IP地址对象
InetAddress ip = InetAddress.getByName("127.0.0.1");
Scanner sc = new Scanner(System.in);
//发送端使用死循环的方式一直发送数据
while(true) {
System.out.println("请输入要发送的信息: ");
byte[] data = sc.nextLine().getBytes();
//创建数据报包,将需要发送的数据传入,并指定发送目的的IP和接收程序的端口号
DatagramPacket dp = new DatagramPacket(data, data.length, ip, 8500);
//创建数据报套接字,把数据包通过套接字发送出去
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
}
}
//由于需要在while(true){}中实现死循环,发动端一直发送数据的效果,故套接字对象不能关闭
//ds.close();
}
接收端:
/*
* 要先打开接收端,再打开发送端,否则发送的数据就丢失了
*/
public class UDPReceive {
public static void main(String[] args) throws IOException{
//创建数据报套接字对象,并打开6000端口进行监听,端口只需要打开一次,所以放在循环外面
DatagramSocket ds = new DatagramSocket(8500);
//UDP协议一次允许发送的最大字节为64KB,数组循环使用
byte[] data = new byte[1024*64];
while(true) {
//创建数据报包,并传入接收数据的字节数组,和用到的长度
DatagramPacket dp = new DatagramPacket(data, data.length);
//接收端套接字接收数据包
ds.receive(dp);
//解包,通常需要解出IP地址、字节长度、发送端的发送端口号
String ip = dp.getAddress().getHostAddress();
int length = dp.getLength();
int port = dp.getPort();
System.out.println(ip + ":" + port + "..." + "..." + new String(data,0,data.length) + "..." + length );
}
//由于接收端需要一直接收数据,所以接收端套接字也不能关闭
//ds.close();
}
}