UDP 编程
jUDP 协议是一种对等通信的实现,发送方之需要接受方的 IP 和 Port,就可以直接向它发送数据,不需要先连接。UDP 是一种无连接的传输协议,每个数据报的大小限制在 64KB 内。数据报是一个在网络上发送的独立信息,它到达时间以及内容本身都不能得到保证。这种传输方式是无需的,也不能确保绝对的安全可靠,但它很简单也具有较高的效率。
使用 UDP 协议进行数据传输,需要将传输数据定义为数据报(DatagramPaket),在数据报中指明所需要到达 Socket(主机地址和端口号),然后再将数据报发送出去。
实例化 DatagramPacket 时使用参数 port 和没有 port 参数的区别在于,提供 port 的一方可以让别人主动发送消息过来,而没有 Port 参数则会在发送消息时自动绑定一个本地没有使用的端口。在接收到发送的数据报时,不仅可以获取数据,还可以获取发送方的 IP 和 Port,这样就可以向发送方发送数据。
// 创建一个缓冲区
byte[] sendMsgBytes = "Hello World!".getBytes();
// 创建发送端 Socket 对象
try (DatagramSocket sendSocket = new DatagramSocket();) {
// 获取本机通信地址
InetAddress address = InetAddress.getLocalHost();
// 打包数据
DatagramPacket sendPacket = new DatagramPacket(sendMsgBytes, 0, sendMsgBytes.length, address, 8080);
// 发送数据
sendSocket.send(sendPacket);
// 发送端等待接收端接收成功后的回应
// 创建一个缓冲区,容量尽量设置大一点因为不知道发送过来的信息有多大
byte[] receiveByte = new byte[1024 * 1024];
// 接受数据报
DatagramPacket receivePacket = new DatagramPacket(receiveByte, 0, receiveByte.length);
// 接收数据
sendSocket.receive(receivePacket);
// 获取接收端发送过来的真实长度以及数据
byte[] data = receivePacket.getData();
int dateLen = receivePacket.getLength();
String receiveMessage = new String(data, 0, dateLen);
// 获取发送者的IP
System.out.println("接收来自 " + receivePacket.getAddress().getHostAddress() + " 的消息:" + receiveMessage);
} catch (IOException e) {
throw new RuntimeException(e);
}
最后更新于
这有帮助吗?