Java NIO系列教程(十) Java NIO DatagramChannel
转载自 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相关推荐
- 转:Java NIO系列教程(一)Java NIO 概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...
- java nio 系列教程 四_Java NIO系列教程(四) Scatter/Gather
作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道) ...
- Java NIO系列教程(十二) Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO Path 译文链接 译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...
- Java NIO系列教程(三) Buffer
2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...
- Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...
- Java NIO系列教程(四) Scatter/Gather
转载自 Java NIO系列教程(四) Scatter/Gather 译文地址 作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...
- Java NIO系列教程(十一) Pipe
转载自 Java NIO系列教程(十一) Pipe 原文链接 作者:Jakob Jenkov 译者:黄忠 校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...
- 视频教程-手写Java框架系列教程之一反射(含配套资料)-Java
手写Java框架系列教程之一反射(含配套资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...
最新文章
- 论文LaTeX、项目README:无脑套用格式、开源模板最高10万赞
- java 过滤器 中文_Java web整站中文过滤器实现
- 【2021】如何看待计算机视觉未来的走向?
- SQL SERVER 查看并结束某个进程
- android ScrollView滚动距离和判断滚动停止状态
- vue 筛选组件_记一个复杂组件(Filter)的从设计到开发
- ICMP Internet控制报文协议
- android自定义更新,Android 完美解决自定义preference与ActivityGroup UI更新的问题
- 全球首款五摄手机Nokia 9 PureView国行版发布:价格惊了!
- 计算机网络管理员高级操作技能考核试卷,高级计算机维修工操作技能考核试卷...
- 使用数据驱动进行配对交易:简单交易策略
- 红米k30pro开发者选项
- 微信二维码无法下载APK解决方案
- #小何不断努力# Day1
- 联通银行卡代扣功能的设计实现
- maven的下载和安装教程
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影
- 软件工程小分队第一次会议
- 数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议
- 微服务(Microservices) ---Martin Flower
热门文章
- Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别
- Java实现AVL平衡树
- [设计模式]合成复用原则
- 连接mysql数据库_解决Navicat连接MySQL数据库报错问题
- mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?
- word List 41
- 顺序表和链表的优缺点理解
- ZOJ The Sum of Unitary Totient(min_25 筛)
- Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维
- AtCoder 4169 [ARC100D] Colorful Sequences(dp)