gpt4 book ai didi

java - SocketChannel.write(ByteBuffer[]) "corrupting"数据

转载 作者:可可西里 更新时间:2023-11-01 02:47:41 25 4
gpt4 key购买 nike

问题:损坏的 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 段以发送“ block 数据”。

段中的问题是:不知何故(?),随机(?),段(其有效负载)以\r\n 开头,而不是首先从“ block 数据”中的剩余字节开始。

所以你得到例如:

(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 代码是否能够导致这种情况,知道我的“ block 数据”ByteBuffer 发送正确,除了包含\r\n 的 ByteBuffer 加入...欢迎任何帮助,感谢您的宝贵时间!

安德鲁

最佳答案

我敢打赌您会忽略读取或写入的结果。 TCP 不会丢失或损坏数据,Socket API 或 Java 网络库也不会。至少我在大约 22 年的网络编程和 14 年的 Java 中从未见过它。

关于java - SocketChannel.write(ByteBuffer[]) "corrupting"数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com