UDPSend.java(发送端):
package cn.xxx.demo; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSend { public static void main(String[] args) throws IOException{ byte[] date = "你好UDP".getBytes(); // 要发送数据的字节数组。 UDP传输数据不能超过64KB //创建InetAddress对象,封装自己的IP地址 InetAddress inet = InetAddress.getByName("127.0.0.1"); DatagramPacket dp = new DatagramPacket(date, date.length, inet, 6000); // 发送端必须指定自己的IP地址和接收端端口 DatagramSocket ds = new DatagramSocket(); // 创建数据传输对象(套接字)。 空参构造器会随机分配一个可用的端口号(一般不关心该端口号)。 ds.send(dp); // 发送数据报对象 ds.close(); //关闭资源 } }UDPReceive.java(接收端):
package cn.xxx.demo; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceive { public static void main(String[] args)throws IOException { //创建数据传输对象(套接字)DatagramSocket 接收端必须绑定端口号 DatagramSocket ds = new DatagramSocket(6000); // 接收端必须绑定端口号;要和发送端的数据报中指定的端口号保持一致 byte[] data = new byte[1024]; DatagramPacket dp = new DatagramPacket(data, data.length); // 创建数据报对象。 ds.receive(dp); // 接收数据到数据报对象中。 数据存到数据报中的字节数组中。 会阻塞线程,一直等待接收到数据为止。 // 拆包 String ip=dp.getAddress().getHostAddress(); //获取发送端的IP地址对象 int port = dp.getPort(); //获取发送端的端口号(一般不关心发送端端口号) int length = dp.getLength(); //获取接收到的字节个数 System.out.println(new String(data,0,length)+"..."+ip+":"+port); ds.close(); // 关闭资源 } }