NIO之DatagramChannel详解编程语言

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     }

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15741.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论