zoukankan      html  css  js  c++  java
  • 十二、Java NIO DatagramChannel

    所有文章

    https://www.cnblogs.com/lay2017/p/12901123.html

    正文

    DatagramChannel是一个可以从UDP连接上发送和接收数据包的通道。和TCP不同,UDP是一种不可靠的无连接协议因此我们对DatagramChannel的读写操作就无法直接照搬SocketChannel的做法。

    打开一个DatagramChannel 

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

    示例代码开启了一个DatagramChannel,并且绑定到了9999端口上,可以建立UDP连接。

    接收数据

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

    receive方法将会把数据拷贝到buffer中,如果buffer的容量不足以包含所有的数据,那么超出的数据将会丢失。

    发送数据

    String newData = "New String to write to file..." + System.currentTimeMillis();
        
    ByteBuffer buf = ByteBuffer.allocate(48);
    buf.clear();
    buf.put(newData.getBytes());
    buf.flip();
    
    int bytesSent = channel.send(buf, new InetSocketAddress("jenkov.com", 80));

    示例代码向jenkov.com服务器的80端口上发送UDP数据包,但是发送成功与否你无法知道,UDP也没有机制来保证数据传递过程。

    连接到指定地址

    DatagramChannel一样可以连接到指定地址

    channel.connect(new InetSocketAddress("jenkov.com", 80)); 

    连接以后,你就可以执行read和write操作,但是数据是否送达其实无法保证

    int bytesRead = channel.read(buf);
    int bytesWritten = channel.write(buf);
  • 相关阅读:
    第九周进度条
    梦断代码阅读笔记01
    NABCD分析
    软件工程个人作业05
    HDU 3949 XOR(线性基)
    luogu 2115 破坏(01分数规划)
    luogu 1360 阵容均衡(前缀和+差分+hash)
    luogu 1967 货车运输(最大生成树+LCA)
    luogu 1344 追查坏牛奶(最小割)
    BZOJ 2007 海拔(平面图最小割转对偶图最短路)
  • 原文地址:https://www.cnblogs.com/lay2017/p/12915206.html
Copyright © 2011-2022 走看看