如何使用Java NIO套接字重新组装数据包

时间:2016-11-23 03:12:44

标签: java sockets nio

如果我有一个连接到服务器的两个连接需要在一个通道上进行多次读取以完成一个数据包,我怎么知道哪个读取与哪个数据包有关?

例如,两个数据包作为四个交错缓冲区接收:

  • PacketA buffer part1
  • PacketB buffer part1
  • PacketA buffer part2
  • PacketB buffer part2

第一部分可能有一个标题,但第二部分可能会在数据包的任何地方分开。

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

我正在考虑构建一个映射,以将每个通道对象与其各自的输出缓冲区相关联,该缓冲区将保存重组的数据包。这是应该做的吗?

1 个答案:

答案 0 :(得分:1)

实际上,典型的做法是为每个通道分别设置缓冲区。你不一定需要一张地图。你可以attach extra information到每个SelectionKey。每个键都可以保存您选择的对象,以便您的代码可以在以后检索。这是存储缓冲区或一组缓冲区的便利位置。