gpt4 book ai didi

java - 解析 TCP 数据包

转载 作者:可可西里 更新时间:2023-11-01 02:39:54 24 4
gpt4 key购买 nike

我在解析来自套接字的 TCP 数据包时遇到了一些问题...

在我的协议(protocol)中,我的消息是这样的:

'A''B''C''D''E'.........0x2300

'A''B''C''D''E' --> 开始消息模式

0x2300 --> 两个字节的结束信息

但是由于Nagle's algorithm ,有时我的消息会像这样串联起来:

'A''B''C''D''E'.........0x2300'A''B''C''D''E'...... ..0x2300'A''B''C''D''E'.......0x2300

我已经尝试将 setNoDelay() 设置为 true,但问题仍然存在。

我在 byte[] 中有消息。

我如何拆分我的消息以便单独解析?

PS:目前我能够收到第一条消息,但其他消息都丢失了......

最佳答案

只需遍历您收到的数据并检查结束标记。找到后,将起始索引设置为下一个包并继续搜索。像这样:

int packageStart = 0;
for(int i = 0; i < data.length - 1; i++) {
if(data[i] == 0x23 && data[i + 1] == 0x00) {
// Found end of package
i++;
processPackage(data, packageStart, i);
packageStart = i;
}
// At this point: from packageStart till data.length are unprocessed bytes...

如前所述,可能会有一些剩余数据(如果 data 没有以结束标记结束)。您可能希望保留它,以便将它添加到下一批接收到的数据中。从而防止因 TCP/IP 包被切碎而导致数据丢失。

关于java - 解析 TCP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199351/

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