Java教程-Java DatagramSocket 和 DatagramPacket

Java DatagramSocket 和 DatagramPacket
Java DatagramSocket 和 DatagramPacket 类用于使用 UDP 而不是 TCP 进行无连接的套接字编程。
数据报
数据报是通过已建立的网络从一个设备发送到另一个设备的信息集合。当数据报发送到目标设备时,无法保证它能够安全完整地到达目标设备。它可能在中间丢失或损坏。同样,接收设备也无法知道接收到的数据报是否损坏。在 Java 中,使用 UDP 协议来实现数据报。
Java DatagramSocket 类
Java DatagramSocket 类表示用于发送和接收数据报包的无连接套接字。它是一种用于在网络上传输数据报包的机制。
数据报基本上是一条信息,但无法保证其内容、到达或到达时间。
常用的 DatagramSocket 类构造方法
- DatagramSocket() throws SocketEeption:创建一个数据报套接字并将其绑定到本地主机上可用的端口号。
- DatagramSocket(int port) throws SocketEeption:创建一个数据报套接字并将其绑定到指定的端口号。
- DatagramSocket(int port, InetAddress address) throws SocketEeption:创建一个数据报套接字并将其绑定到指定的端口号和主机地址。
Java DatagramSocket 类方法
Method | Description |
---|---|
void bind(SocketAddress addr) | 它将 DatagramSocket 绑定到特定地址和端口。 |
void close() | 它关闭数据报套接字。 |
void connect(InetAddress address, int port) | 它将套接字连接到套接字的远程地址。 |
void disconnect() | 它断开套接字。 |
boolean getBroadcast() | 它测试是否启用了 SO_BROADCAST。 |
DatagramChannel getChannel() | 它返回与数据报套接字关联的唯一 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) | 它从套接字发送数据报包。 |
void receive(DatagramPacket p) | 它从套接字接收数据报包。 |
Java DatagramPacket 类
Java DatagramPacket 是可以发送或接收的消息。它是一个数据容器。如果发送多个数据包,它们可能以任何顺序到达。此外,无法保证数据包的传递。
常用的 DatagramPacket 类构造方法
- DatagramPacket(byte[] barr, int length):创建一个数据报包。此构造方法用于接收数据包。
- DatagramPacket(byte[] barr, int length, InetAddress address, int port):创建一个数据报包。此构造方法用于发送数据包。
Java DatagramPacket 类方法
Method | Description |
---|---|
1) InetAddress getAddress() | 它返回将数据报发送到的机器或从中接收数据报的机器的 IP 地址。 |
2) byte[] getData() | 它返回数据缓冲区。 |
3) int getLength() | 它返回要发送的数据的长度或接收到的数据的长度。 |
4) int getOffset() | 它返回要发送的数据的偏移量或接收到的数据的偏移量。 |
5) int getPort() | 它返回将数据报发送到的远程主机上的端口号或从中接收数据报的端口号。 |
6) SocketAddress getSocketAddress() | 它获取数据包发送到或来自的远程主机的 SocketAddress(IP 地址 + 端口号)。 |
7) void setAddress(InetAddress iaddr) | 它设置要将数据报发送到的机器的 IP 地址。 |
8) void setData(byte[] buff) | 它为数据包设置数据缓冲区。 |
9) void setLength(int length) | 它设置数据包的长度。 |
10) void setPort(int iport) | 它设置数据报发送到的远程主机上的端口号。 |
11) void setSocketAddress(SocketAddress addr) | 它设置数据报发送到的远程主机的 SocketAddress(IP 地址 + 端口号)。 |
通过 DatagramSocket 发送 DatagramPacket 的示例
//DSender.java
导入 java.net.*;
公共类 DSender{
public static void main(String[] args) 抛出 异常 {
DatagramSocket ds = new DatagramSocket();
String str = "欢迎使用 java" ;
InetAddress ip = InetAddress.getByName( "127.0.0.1" );
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), ip, 3000 );
ds.发送(dp);
ds.close();
}
}
输出:
通过 DatagramSocket 接收 DatagramPacket 的示例
输出: