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

How to reassemble packets with Java NIO Sockets

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

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

第一部分可能有一个 header,但第二部分可能会在数据包的任何地方被分割到达。

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

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

的确,典型的做法是为每个通道设置单独的缓冲区。您不一定需要地图。你可以 attach extra information 每个 SelectionKey。每个键都可以保存您选择的对象,您的代码可以稍后检索该对象。这是存储缓冲区或一组缓冲区的方便位置。