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);

最新文章

  1. MySQL常用命令
  2. UML大战需求分析--阅读笔记01
  3. 4.4 多线程进阶篇<下>(NSOperation)
  4. iOS开源App整理
  5. bzoj4562: [Haoi2016]食物链--记忆化搜索
  6. RichEdit
  7. paip.cache 缓存架构以及性能提升总结
  8. 从零开始学Bootstrap(2)
  9. 灰度图像 Grayscale Binary_image
  10. 《APUE》第五章练习1
  11. 解决adb问题的方法
  12. 【原创】alias与export
  13. cache 的简单认识与思考
  14. 转载 8天掌握EF的Code First开发之Entity Framework介绍
  15. JavaScript - 运算符 == 与 === 的区别
  16. this、访问修饰符——Java笔记(五)
  17. DM8168 layout
  18. WebDriver(Selenium2) 处理可能存在的JS弹出框
  19. Words used when reading Redis documents
  20. 关于部署php遇到的坑

热门文章

  1. Python更改pip源
  2. zencart用sql语句设置默认语言
  3. devops发展历程
  4. Css案例整理
  5. React中setState的怪异行为 ——setState没有即时生效
  6. i p _ d o o p t i o n s函数
  7. harbor1.9仓库同步迁移
  8. SQL的左连接与右链接
  9. vue 内联样式style三元表达式(动态绑定样式)
  10. nginx初步学习