📜  Java DatagramSocket和DatagramPacket(1)

📅  最后修改于: 2023-12-03 14:42:13.627000             🧑  作者: Mango

Java DatagramSocket和DatagramPacket

Java的DatagramSocket和DatagramPacket类可用于在网络上发送和接收UDP协议的数据报。下面将对这两个类进行详细介绍。

DatagramSocket

DatagramSocket类代表一个可以发送和接收数据包的套接字。与TCP协议不同,UDP协议使用无连接的数据报,因此程序员需要自己控制数据包的发送和接收。

创建DatagramSocket

可以通过以下代码创建一个DatagramSocket实例:

DatagramSocket socket = new DatagramSocket();

如果要绑定特定的网络接口和端口,可以使用以下构造函数:

DatagramSocket socket = new DatagramSocket(port, InetAddress.getByName(address));

其中,port是要绑定的端口号,address是要绑定的IP地址。

发送数据包

要发送一个数据包,可以先创建一个DatagramPacket对象,然后调用DatagramSocket的send()方法:

byte[] data = "Hello, world!".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 1234);
socket.send(packet);

其中,第一个参数是要发送的数据,第二个参数是数据的长度,第三个参数是目标主机的IP地址,第四个参数是目标主机的端口号。

接收数据包

要从一个DatagramSocket接收数据包,可以创建一个空的DatagramPacket对象,然后调用DatagramSocket的receive()方法:

byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
关闭DatagramSocket

在结束使用DatagramSocket后,应该调用其close()方法:

socket.close();
DatagramPacket

DatagramPacket类代表一个UDP数据包。它可以用于发送数据包和接收数据包。

创建DatagramPacket

可以通过以下构造函数创建一个DatagramPacket实例:

DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 1234);

其中,第一个参数是要发送或接收的数据,第二个参数是数据的长度,第三个参数是目标主机的IP地址,第四个参数是目标主机的端口号。

获取DatagramPacket数据

DatagramPacket类提供了以下方法获取其数据:

  • getData():返回数据的byte数组。
  • getLength():返回数据的长度。
  • getAddress():返回发送或接收方的IP地址。
  • getPort():返回发送或接收方的端口号。
总结

本文介绍了Java的DatagramSocket和DatagramPacket类,它们可用于在网络上发送和接收UDP协议的数据报。程序员需要自己控制数据报的发送和接收,但使用这两个类可以方便地完成这项工作。