2016-11-23 23 views
1

如果我有两个连接到一个服务器,需要在一个通道上多次读取才能完成数据包,我将如何知道哪个数据包与哪个数据包一起进行?如何用Java NIO套接字重组数据包

对于被接收为四个交错缓冲器例如两个数据包:

  • PacketA缓冲器part1的
  • PacketB缓冲器part1的
  • PacketA缓冲器2部分
  • PacketB缓冲器2部分

的第一部分可能有一个标题,但第二部分可以在分组的任何地方分开到达。

当收到部分数据包时,如何知道哪个缓冲区在哪里?

我在考虑建立一个映射关联每个通道对象与其各自的输出缓冲区,它将保存重组的数据包。这是它应该完成的方式吗?

回答

1

确实,典型的做法是为每个通道分别设置缓冲区。你不一定需要一张地图。您可以将attach extra information分配给各个SelectionKey。每个键都可以包含您的代码可以稍后检索的对象。这是存储缓冲区或一组缓冲区的便利场所。