发送端
public void send() throws IOException{
DatagramChannel dc = DatagramChannel.open();//获取通道
dc.configureBlocking(false);//切换非阻塞模式
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
String data = scanner.next();
byteBuffer.put((LocalDateTime.now().toString()+"\n"+data).getBytes());
byteBuffer.flip();
dc.send(byteBuffer,new InetSocketAddress("127.0.0.1",8989));
byteBuffer.clear();
}
dc.close();
}
接收端
public void receive() throws IOException{
DatagramChannel dc = DatagramChannel.open(); //获取通道
dc.configureBlocking(false); //切换非阻塞模式
dc.bind(new InetSocketAddress(8989)); //绑定端口
Selector selector = Selector.open(); //获取选择器
dc.register(selector,SelectionKey.OP_READ); //将通道注册到选择器中
while(selector.select() > 0){ //轮询获取选择器上准备就绪的状态
Iterator<SelectionKey> it = selector.selectedKeys().iterator(); //获取选择器中所有注册的选择键
while(it.hasNext()){
SelectionKey selectionKey = it.next(); //获取就绪的事件
if(selectionKey.isReadable()){ //判断是否为读取事件、然后读取
ByteBuffer buffer = ByteBuffer.allocate(1024);
dc.receive(buffer);
buffer.flip();
System.out.println(new String(buffer.array(),0,buffer.limit()));
buffer.clear();
}
}
it.remove();//取消选择键
}
}