十Java NIO DatagramChannel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十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);

 

以上是关于十Java NIO DatagramChannel的主要内容,如果未能解决你的问题,请参考以下文章

Java NIO系列教程 Java NIO DatagramChannel

java的nio之:java的nio系列教程之DatagramChannel

Java-NIO:DatagramChannel

Java NIO学习笔记八 DatagramChannel

java-NIO-DatagramChannel(UDP)

Java NIO 学习--DataGramChannel