问题:损坏的 TCP 段。
我在 SocketChannel 中一遍又一遍地发送一系列 ByteBuffer。顺序如下:
\r\n
length of chunk (example: fff)
\r\n
chunk data (rubbish, a 1000 - 5000 character long string)
\r\n
length of next chunk (example: fff)
\r\n
next chunk data (rubbish, a 1000 - 5000 character long string)
...
我希望你能看到模式。网络级别的 MTU 约为 1500,因此它将创建 TCP 段以通过“块数据”发送。
段中的问题是:不知何故(?),随机(?),段(其有效负载)以 \r\n 开头,而不是首先来自“块数据”的剩余字节。
所以你得到例如:
(segment 1)
\r\n
length of chunk (example: fff)
\r\n
chunk data (456 bytes)
(segment 2)
\r\n
chunk data (remaining 156 bytes)
length of next
\r\n
代替:
(segment 1)
\r\n
length of chunk (example: fff)
\r\n
chunk data (456 bytes)
(segment 2)
chunk data (remaining 156 bytes)
\r\n
length of next
\r\n
我想知道 Java 代码是否甚至能够导致这种情况,知道我的“块数据”ByteBuffer 发送正确,除了包含 \r\n 的 ByteBuffer 加入...欢迎任何帮助,谢谢您的时间!
安德鲁