Java NIO中的DatagramChannel是一个能收发UDP包的通道。
操作步骤:
1)打开 DatagramChannel
2)接收/发送数据
同样它也支持NIO的非阻塞模式操作,例如:
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 }
本文详细介绍了如何使用Java NIO中的DatagramChannel进行UDP数据包的发送与接收,包括创建通道、配置非阻塞模式、绑定端口、发送及接收数据等关键步骤,并提供了完整的示例代码。
:DatagramChannel&spm=1001.2101.3001.5002&articleId=78853794&d=1&t=3&u=8db1aebba17843eea73e74859d7f717c)
308

被折叠的 条评论
为什么被折叠?



