gpt4 book ai didi

c++ - 在 C++ 的字符串中定位 STX 和 ETX

转载 作者:可可西里 更新时间:2023-11-01 02:44:33 26 4
gpt4 key购买 nike

<分区>

有没有办法检测 c++ 中 recv() 收到的消息中的 STX(文本开始)和 ETX(文本结束)字符序列?我正在尝试修复 TCP 中可能发生的任何部分读取,以便我可以重新生成完整的消息。

谢谢!

编辑1:

是否按照 unwind 的回答做了以下事情:

char c = '\x02';
if(memchr((*it).c_str(), c, numberOfCharactersRead) != NULL)
cout << "STX found" << endl;

我还是没能检测到这个角色。这个实现有什么问题吗? 'it' 是字符串类型 vector 的迭代器。

编辑2:

这是接收数据和检查字符的完整代码:

int numberOfCharactersRead = 0;

do {
char msgBuffer[1000];
memset(msgBuffer, 0, 1000);
numberOfCharactersRead = recv(clientSideSocket, msgBuffer, (1000 - 1), 0);
if (numberOfCharactersRead < 0) {
close(clientSideSocket);
}
else if (numberOfCharactersRead == 0)
close(clientSideSocket);
else {
char c = '\x02';
if(memchr(msgBuffer, c, numberOfCharactersRead) != NULL)
cout << "STX found" << endl;
memset(msgBuffer, 0, 1000);
}

} while (numberOfCharactersRead > 0);

因此,我只是检查 STX,尚未连接缓冲数据。但是,对 STX 的检查仍然失败。请让我知道此方法中的任何问题。

谢谢。

编辑3:

我得到了示例消息的以下十六进制值:

3C 31 34 32 3E 4F 63 74 20 32 35 20 31 31 3A 33 39 3A 31 32 20 6C 6F 63 61 6C 68 6F 73 74 20 5B 20 32 30 31 32 2D 4F 63 74 2D 32 35 20 31 31 3A 33 39 3A 31 32 2C 36 31 33 20 5D 20 20 20 20 49 4E 46 4F 20 7B 20 4D 61 69 6E 2E 6A 61 76 61 20 7D 20 2D 20 74 65 73 74 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 6D 65 73 73 61 67 65 20

所以 STX/ETX 的十六进制值不存在。这意味着不能使用 STX 和 ETX 来检查消息的形成。

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