zoukankan      html  css  js  c++  java
  • Java NIO学习笔记八 DatagramChannel

    Java NIO DatagramChannel

      Java NIO DatagramChannel是可以发送和接收UDP数据包的通道。由于UDP是一种无连接网络协议,因此您不能默认读取和写入DatagramChannel其他通道。而是发送和接收数据包。

    打开DatagramChannel

    打开一个DatagramChannel代码

    DatagramChannel channel = DatagramChannel.open();
    channel.socket().bind(new InetSocketAddress(9999));

    此示例打开DatagramChannel可以在UDP端口9999上接收数据包。

    接收数据

    可以通过DatagramChannel调用receive()方法来接收数据,如下所示:

    ByteBuffer buf = ByteBuffer.allocate(48);
    buf.clear();
    
    channel.receive(buf);

      receive()方法将将接收到的数据包的内容复制到给定的Buffer中。如果接收到的数据包包含的数据多于Buffer 可以容纳的数据,则剩下的数据将被静默地丢弃。

    发送数据

    可以通过DatagramChannel调用send()方法发送数据,如下所示:

    String newData =“要写入文件的新字符串...”
                        + System.currentTimeMillis();
        
    ByteBuffer buf = ByteBuffer.allocate(48);
    buf.clear();
    buf.put(newData.getBytes());
    buf.flip();
    
    int bytesSent = channel.send(buf,new InetSocketAddress(“at.com”,80));

      此示例将字符串发送到UDP端口80上的“jenkov.com”服务器。尽管如此,该端口上没有监听任何内容,因此不会发生任何事情。您不会收到发送数据包是否收到的通知,因为UDP对数据传送没有任何保证。

    连接到特定地址

      可以将a连接DatagramChannel到网络上的特定地址。由于UDP是无连接的,因此连接到地址的方式不会像TCP通道那样创建真正的连接。相反,它锁定你DatagramChannel,所以你只能从一个特定的地址发送和接收数据包。

    例如:

    channel.connect(new InetSocketAddress(“at.com”,80));

      连接时,您也可以使用read()write()方法,就像您使用传统渠道一样。您对发送的数据的交付没有任何保证。以下是几个例子:

    int bytesRead = channel.read(buf);    
    int bytesWritten = channel.write(buf);
  • 相关阅读:
    迷宫最短路问题
    回溯算法
    解题报告:poj1321 棋盘问题
    矩阵、分数、点、线类
    判断图像中有多少行文本(开发中)
    图形-回行扫描函数
    贝叶斯分类器
    js解析数学运算公式
    用postcss给less加上webkit前缀
    node创建文件夹
  • 原文地址:https://www.cnblogs.com/kuoAT/p/7018956.html
Copyright © 2011-2022 走看看