使用C++在字符串中定位STX和ETX

Izz*_*zza 1 c++ tcp stx recv

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

谢谢!

EDIT1:

按照放松的答案做了以下事项:

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

我仍然没有设法检测到这个角色.这个实现有什么问题吗?'it'是字符串类型向量的迭代器.

EDIT2:

这是接收数据和检查角色的完整代码:

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); 
Run Code Online (Sandbox Code Playgroud)

所以,我只是检查STX,还没有连接缓冲数据.但是,检查STX仍然失败.请告诉我这种方法的任何问题.

谢谢.

EDIT3:

我为示例消息获得了以下十六进制值:

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
Run Code Online (Sandbox Code Playgroud)

因此,不存在STX/ETX的十六进制值.这意味着不能使用STX和ETX来检查消息的形成.

unw*_*ind 7

好吧,STX和ETX不是"序列",它们是单个字符.因此,您应该可以使用普通memchr()调用来搜索字符.

字符值仅仅'\x02'为STX和'\x03'的ETX.

请注意,您需要传入收到的大小.由于(我假设)不能保证部分接收的消息是0终止的,所以你不能使用strchr().