Java NIO中的DatagramChannel是一个能收发UDP包的通道。
操作步骤:
1)打开 DatagramChannel
2)接收/发送数据
同样它也支持NIO的非阻塞模式操作,例如:
1 @Test 2 public void send() throws IOException { 3 DatagramChannel channel = DatagramChannel.open(); 4 channel.configureBlocking(false); 5 6 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); 7 8 Scanner scanner = new Scanner(System.in); 9 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 10 while (scanner.hasNext()) { 11 String line = scanner.next(); 12 byteBuffer.put((format.format(new Date()) + ":" + line).getBytes()); 13 byteBuffer.flip(); 14 15 channel.send(byteBuffer, new InetSocketAddress("127.0.0.1", 9899)); 16 byteBuffer.clear(); 17 } 18 19 channel.close(); 20 } 21 22 @Test 23 public void receive() throws IOException { 24 DatagramChannel channel = DatagramChannel.open(); 25 channel.configureBlocking(false); 26 channel.bind(new InetSocketAddress(9899)); 27 28 Selector selector = Selector.open(); 29 channel.register(selector, SelectionKey.OP_READ); 30 31 while (selector.select() > 0) { 32 Iterator<SelectionKey> selectionKeys = selector.selectedKeys().iterator(); 33 while (selectionKeys.hasNext()) { 34 SelectionKey selectionKey = selectionKeys.next(); 35 if (selectionKey.isReadable()) { 36 ByteBuffer buffer = ByteBuffer.allocate(1024); 37 channel.receive(buffer); 38 buffer.flip(); 39 System.out.println(new String(buffer.array(), 0, buffer.limit())); 40 buffer.clear(); 41 } 42 43 selectionKeys.remove(); 44 } 45 } 46 47 }
时间: 2024-10-31 15:13:37