转载自  Java NIO系列教程(十) Java NIO DatagramChannel

译文链接    作者:Jakob Jenkov    译者:郑玉婷     校对:丁一

Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。

打开 DatagramChannel

下面是 DatagramChannel 的打开方式:

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

这个例子打开的 DatagramChannel可以在UDP端口9999上接收数据包。

接收数据

通过receive()方法从DatagramChannel接收数据,如:

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

receive()方法会将接收到的数据包内容复制到指定的Buffer. 如果Buffer容不下收到的数据,多出的数据将被丢弃。

发送数据

通过send()方法从DatagramChannel发送数据,如:

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

这个例子发送一串字符到”jenkov.com”服务器的UDP端口80。 因为服务端并没有监控这个端口,所以什么也不会发生。也不会通知你发出的数据包是否已收到,因为UDP在数据传送方面没有任何保证。

连接到特定的地址

可以将DatagramChannel“连接”到网络中的特定地址的。由于UDP是无连接的,连接到特定地址并不会像TCP通道那样创建一个真正的连接。而是锁住DatagramChannel ,让其只能从特定地址收发数据。

这里有个例子:

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

当连接后,也可以使用read()和write()方法,就像在用传统的通道一样。只是在数据传送方面没有任何保证。这里有几个例子:

1 int bytesRead = channel.read(buf);
2 int bytesWritten = channel.write(but);

Java NIO系列教程(十) Java NIO DatagramChannel相关推荐

  1. 转:Java NIO系列教程(一)Java NIO 概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...

  2. java nio 系列教程 四_Java NIO系列教程(四) Scatter/Gather

    作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道) ...

  3. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  4. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  5. Java NIO系列教程(三) Buffer

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...

  6. Java NIO系列教程(五) 通道之间的数据传输

    在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...

  7. Java NIO系列教程(四) Scatter/Gather

    转载自   Java NIO系列教程(四) Scatter/Gather 译文地址  作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...

  8. Java NIO系列教程(十一) Pipe

    转载自  Java NIO系列教程(十一) Pipe 原文链接     作者:Jakob Jenkov     译者:黄忠       校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...

  9. 视频教程-手写Java框架系列教程之一反射(含配套资料)-Java

    手写Java框架系列教程之一反射(含配套资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...

最新文章

  1. 论文LaTeX、项目README:无脑套用格式、开源模板最高10万赞
  2. java 过滤器 中文_Java web整站中文过滤器实现
  3. 【2021】如何看待计算机视觉未来的走向?
  4. SQL SERVER 查看并结束某个进程
  5. android ScrollView滚动距离和判断滚动停止状态
  6. vue 筛选组件_记一个复杂组件(Filter)的从设计到开发
  7. ICMP Internet控制报文协议
  8. android自定义更新,Android 完美解决自定义preference与ActivityGroup UI更新的问题
  9. 全球首款五摄手机Nokia 9 PureView国行版发布:价格惊了!
  10. 计算机网络管理员高级操作技能考核试卷,高级计算机维修工操作技能考核试卷...
  11. 使用数据驱动进行配对交易:简单交易策略
  12. 红米k30pro开发者选项
  13. 微信二维码无法下载APK解决方案
  14. #小何不断努力# Day1
  15. 联通银行卡代扣功能的设计实现
  16. maven的下载和安装教程
  17. scrapy爬虫框架教程(二)-- 爬取豆瓣电影
  18. 软件工程小分队第一次会议
  19. 数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议
  20. 微服务(Microservices) ---Martin Flower

热门文章

  1. Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别
  2. Java实现AVL平衡树
  3. [设计模式]合成复用原则
  4. 连接mysql数据库_解决Navicat连接MySQL数据库报错问题
  5. mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?
  6. word List 41
  7. 顺序表和链表的优缺点理解
  8. ZOJ The Sum of Unitary Totient(min_25 筛)
  9. Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维
  10. AtCoder 4169 [ARC100D] Colorful Sequences(dp)