如果我有两个到服务器的连接,需要在一个 channel 上多次读取才能完成一个数据包,我如何知道哪个读取与哪个数据包相关?
例如,作为四个交错缓冲区接收的两个数据包:
- 数据包A缓冲区第1部分
- PacketB 缓冲区第 1 部分
- 数据包A缓冲区第2部分
- PacketB 缓冲区第 2 部分
第一部分可能有一个 header ,但第二部分可能会沿着数据包的任何位置分割到达。
当接收到部分数据包时,我如何知道哪个缓冲区去了哪里?
我正在考虑构建一个映射,将每个 channel 对象与其各自的输出缓冲区关联起来,该缓冲区将保存重新组装的数据包。这是应该的方式吗?
最佳答案
事实上,典型的做法是为每个 channel 设置单独的缓冲区。您不一定需要 map 。你可以attach extra information到每个 SelectionKey
。每个键都可以保存您选择的对象,您的代码可以稍后检索该对象。这是存储一个缓冲区或一组缓冲区的方便位置。
关于java - 如何使用 Java NIO 套接字重新组装数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755379/