【Java NIO 简例】DatagramChannel

阅读更多

原文:《Java NIO  DatagramChannel》

DatagramChannel是可以发送与接收UDP数据包的channel。因为UDP是无连接的网络协议,所以你不能像操作其它channel那样对其读写。你需要发送或接收数据包。

 

开启DatagramChannel

DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));

该示例代码开启了一个 DatagramChannel,可以从 9999 这个端口接收数据包。

 

接收数据包

ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.clear();
channel.receive(buffer);

receive()方法会将所收到数据包中的数据拷贝到指定的buffer中。如果数据包的数据库量超过buffer的容量,多余的数据将被安静地丢弃。

 

发送数据

// byte[] data = ...
ByteBuffer buffer = ByteBuffer.allocate(data.length);
buffer.clear();
buffer.put(data);
buffer.flip();
channel.send(buffer, new InetSocketAddress("abc.xyz", 80));

该示例代码向“abc.xyz”这个服务器的80端口发送了一些数据(data)。因为UDP不保证数据的传输,所以永远都不会得到数据包是否已被接收的通知。

 

还可以先指定一个固定的地址,后续都向该地址发送数据,或从该地址接收数据。

channel.connect(new InetSocketAddress("abc.xyz", 80));
channel.read(buffer);
channel.write(buffer);

你可能感兴趣的:(nio)