zoukankan      html  css  js  c++  java
  • Java-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     }
  • 相关阅读:
    Vue 组件之间传值(父子组件传值,vuex传值)
    利用computed和watch实现监听Vuex状态监听
    ESlint+VSCode自动格式化
    MySQL之分组查询(DQL)
    MySQL之排序查询(DQL)
    MySQL之条件查询(DQL)
    MySQL之概述
    jQuery之轮播图
    jQuery之添加删除记录
    jQuery之爱好选择
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/7266313.html
Copyright © 2011-2022 走看看