Java DatagramSocket and DatagramPacket

17 Mar 2025 | 4 分钟阅读

Java 的 DatagramSocket 和 DatagramPacket 类用于使用 UDP 而非 TCP 的无连接套接字编程。

Datagram

Datagrams 是从一个设备到另一个设备通过已建立的网络发送的信息集合。当 datagram 发送到目标设备时,不能保证它能够安全完整地到达目标设备。它可能在中间损坏或丢失。同样,接收设备也无法知道收到的 datagram 是否损坏。UDP 协议用于在 Java 中实现 datagram。

Java DatagramSocket 类

Java DatagramSocket 类表示一个用于发送和接收 datagram 包的无连接套接字。它是一种用于通过网络传输 datagram 包的机制。

Datagram 基本就是信息,但是不保证其内容、到达或到达时间。

DatagramSocket 类的常用构造函数

  • DatagramSocket() throws SocketEeption: 创建一个 datagram 套接字并将其绑定到本地机器上的可用端口号。
  • DatagramSocket(int port) throws SocketEeption: 创建一个 datagram 套接字并将其绑定到给定的端口号。
  • DatagramSocket(int port, InetAddress address) throws SocketEeption: 创建一个 datagram 套接字并将其绑定到指定的端口号和主机地址。

Java DatagramSocket 类

方法描述
void bind(SocketAddress addr)将 DatagramSocket 绑定到特定的地址和端口。
void close()关闭 datagram 套接字。
void connect(InetAddress address, int port)将套接字连接到远程地址。
void disconnect()断开套接字连接。
boolean getBroadcast()测试 SO_BROADCAST 是否已启用。
DatagramChannel getChannel()返回与 datagram 套接字关联的唯一 DatagramChannel 对象。
InetAddress getInetAddress()返回套接字连接到的地址。
InetAddress getLocalAddress()获取套接字连接到的本地地址。
int getLocalPort()返回套接字绑定到的本地主机上的端口号。
SocketAddress getLocalSocketAddress()返回套接字绑定的端点的地址。
int getPort()返回套接字连接到的端口号。
int getReceiverBufferSize()获取此 DatagramSocket 的 SO_RCVBUF 选项的值,即平台在 DatagramSocket 上进行输入时使用的缓冲区大小。
boolean isClosed()返回套接字的状态,即是否已关闭。
boolean isConnected()返回套接字连接状态。
void send(DatagramPacket p)从套接字发送 datagram 包。
void receive(DatagramPacket p)从套接字接收 datagram 包。

Java DatagramPacket 类

Java DatagramPacket 是可以发送或接收的消息。它是一个数据容器。如果您发送多个包,它们可能以任何顺序到达。此外,不能保证包的传递。

DatagramPacket 类的常用构造函数

  • DatagramPacket(byte[] barr, int length): 创建一个 datagram 包。此构造函数用于接收数据包。
  • DatagramPacket(byte[] barr, int length, InetAddress address, int port): 创建一个 datagram 包。此构造函数用于发送数据包。

Java DatagramPacket 类方法

方法描述
1) InetAddress getAddress()返回正在发送 datagram 的机器的 IP 地址,或者 datagram 是从哪台机器接收的。
2) byte[] getData()返回数据缓冲区。
3) int getLength()返回要发送的数据的长度,或者已接收数据的长度。
4) int getOffset()返回要发送数据的偏移量,或者已接收数据的偏移量。
5) int getPort()返回正在发送 datagram 的远程主机上的端口号,或者 datagram 是从哪台远程主机接收的。
6) SocketAddress getSocketAddress()获取正在发送 datagram 的远程主机的 SocketAddress(IP 地址 + 端口号),或者 datagram 是从哪台远程主机接收的。
7) void setAddress(InetAddress iaddr)设置正在发送 datagram 的机器的 IP 地址。
8) void setData(byte[] buff)设置数据包的数据缓冲区。
9) void setLength(int length)设置数据包的长度。
10) void setPort(int iport)设置正在发送 datagram 的远程主机上的端口号。
11) void setSocketAddress(SocketAddress addr)设置正在发送 datagram 的远程主机的 SocketAddress(IP 地址 + 端口号)。

使用 DatagramSocket 发送 DatagramPacket 的示例

输出

DatagramSocket and DatagramPacket

使用 DatagramSocket 接收 DatagramPacket 的示例

输出

DatagramSocket and DatagramPacket