如何使用 Java NIO 套接字重组数据包
How to reassemble packets with Java NIO Sockets
如果我有两个到服务器的连接,需要在一个通道上多次读取才能完成一个数据包,我如何知道哪个读取与哪个数据包一起进行?
例如,作为四个交错缓冲区接收的两个数据包:
- PacketA 缓冲区第 1 部分
- PacketB 缓冲区第 1 部分
- PacketA 缓冲区第 2 部分
- PacketB 缓冲区第 2 部分
第一部分可能有一个 header,但第二部分可能会在数据包的任何地方被分割到达。
当接收到部分数据包时,我如何知道哪个缓冲区去了哪里?
我正在考虑构建一个映射以将每个通道 object 与其各自的输出缓冲区相关联,该输出缓冲区将保存重新组装的数据包。这是应该的方式吗?
的确,典型的做法是为每个通道设置单独的缓冲区。您不一定需要地图。你可以 attach extra information 每个 SelectionKey
。每个键都可以保存您选择的对象,您的代码可以稍后检索该对象。这是存储缓冲区或一组缓冲区的方便位置。
如果我有两个到服务器的连接,需要在一个通道上多次读取才能完成一个数据包,我如何知道哪个读取与哪个数据包一起进行?
例如,作为四个交错缓冲区接收的两个数据包:
- PacketA 缓冲区第 1 部分
- PacketB 缓冲区第 1 部分
- PacketA 缓冲区第 2 部分
- PacketB 缓冲区第 2 部分
第一部分可能有一个 header,但第二部分可能会在数据包的任何地方被分割到达。
当接收到部分数据包时,我如何知道哪个缓冲区去了哪里?
我正在考虑构建一个映射以将每个通道 object 与其各自的输出缓冲区相关联,该输出缓冲区将保存重新组装的数据包。这是应该的方式吗?
的确,典型的做法是为每个通道设置单独的缓冲区。您不一定需要地图。你可以 attach extra information 每个 SelectionKey
。每个键都可以保存您选择的对象,您的代码可以稍后检索该对象。这是存储缓冲区或一组缓冲区的方便位置。