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

标签 java sockets nio

如果我有两个到服务器的连接,需要在一个 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/

相关文章:

java - 如何在java中的FileWacther中查看多个硬盘分区

java - 如何仅在一个 Activity 中显示 toast 消息?

c# - 让客户端提取数据

java - 是否可以使用 Java PreparedStatement 和 MySQL 存储例程进行 SQL 注入(inject)

java - 安卓编译器: Cannot resolve symbol string

ios - 如何使用 NSStream 连接到主机名具有附加路径的 wss 套接字?

java - 如何查找并取消选择器的空闲 channel ?

Java I/O 与带有 Linux NPTL 的 Java 新 I/O (NIO)

java - 黑莓运行时错误 : FRIDG: could not find img/logo. png

java - 远程调用同一服务器上存在的 EJB 时出现 ClassCastException