清单 5. 发送以及接收数据报
// send message
ByteBuffer message = ByteBuffer.wrap("Hello to all listeners".getBytes());
server.send(message, new InetSocketAddress(group, port));
// receive message
final ByteBuffer buffer = ByteBuffer.allocate(100);
client.receive(buffer, null, new CompletionHandler<SocketAddress, Object>() {
@Override
public void completed(SocketAddress address, Object attachment) {
System.out.println("Message from " + address + ": " +
new String(buffer.array()));
}
@Override
public void failed(Throwable e, Object attachment) {
System.err.println("Error receiving datagram");
e.printStackTrace();
}
});
ByteBuffer message = ByteBuffer.wrap("Hello to all listeners".getBytes());
server.send(message, new InetSocketAddress(group, port));
// receive message
final ByteBuffer buffer = ByteBuffer.allocate(100);
client.receive(buffer, null, new CompletionHandler<SocketAddress, Object>() {
@Override
public void completed(SocketAddress address, Object attachment) {
System.out.println("Message from " + address + ": " +
new String(buffer.array()));
}
@Override
public void failed(Throwable e, Object attachment) {
System.err.println("Error receiving datagram");
e.printStackTrace();
}
});
可在同一端口上创建多个客户端,它们可加入多播组来接收来自服务器的数据报。
结束语
NIO.2 的异步通道 APIs 提供方便的、平台独立的执行异步操作的标准方法。这使得应用程序开发人员能够以更清晰的方式来编写程序,而不必定义自己的 Java 线程,此外,还可通过使用底层 OS 所支持的异步功能来提高性能。如同其他 Java API 一样,API 可利用的 OS 自有异步功能的数量取决于其对该平台的支持程度。