首页 > 代码库 > Java NIO学习笔记八 DatagramChannel
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 =http://www.mamicode.com/“要写入文件的新字符串...” + 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);
Java NIO学习笔记八 DatagramChannel
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。