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);
  • 相关阅读:
    iOS App之间跳转
    iOS 编码转换
    iOS文件类型判断
    iOS 运行时
    libqrencode生成二维码
    设置app的启动图
    根据字体计算CGRect
    iOS 英文学习
    libev 中IO事件循环解析
    libev 默认事件循环初始化的解析
  • 原文地址:https://www.cnblogs.com/kuoAT/p/7018956.html
Copyright © 2011-2022 走看看