其他分享
首页 > 其他分享> > 我需要使用NIO DatagramChannel处理部分读/写的数据包吗?

我需要使用NIO DatagramChannel处理部分读/写的数据包吗?

作者:互联网

使用SocketChannel时,需要保留读取和写入缓冲区以处理部分写入和读取.

我有点怀疑,使用DatagramChannel时可能不需要它,但是信息很少.

这是什么故事?

我是否应该重复调用(非阻塞)receive(ByteBuffer),直到返回空值以读取所有等待的数据报?

在非阻塞模式下发送时,我可以依靠send(ByteBuffer,SocketAddress)发送整个缓冲区还是完全拒绝它,还是需要保留部分写入的缓冲区?

解决方法:

每次读取数据报都是整个数据报,仅此而已.在java.nio.DatagramChannel.read的描述中有一种暗示:

If there are more bytes in the
datagram than remain in the given
buffers then the remainder of the
datagram is silently discarded

当您处理SocketChannel时,它是一个消息流.由于TCP正在重组单独的数据包以从另一端重新创建消息,因此无法保证每次读取都会获得多少数据.但是对于UDP(这是您使用DatagramChannel读取的内容),每个数据包都是其自己的原子消息.

标签:datagram,sockets,java
来源: https://codeday.me/bug/20191024/1921320.html