当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用NIODatagramChannel我需要处理部分读/写数据包吗?》经验,为你挑选了1个好方法。

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

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

这是什么故事?

我应该反复调用(非阻塞)接收(ByteBuffer),直到我得到一个空值来读取所有等待的数据报吗?

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



1> Jared Oberha..:

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

如果数据报中的字节数多于保留在给定缓冲区中的字节数,则静默丢弃数据报的其余部分

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

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有