tcp — расположение STX и ETX в строке в переполнении стека

Есть ли способ обнаружить последовательности символов STX (начало текста) и ETX (конец текста) в сообщении, полученном recv () в c ++? Я пытаюсь исправить любые частичные чтения, которые могут произойти в TCP, чтобы я мог преобразовать полное сообщение.

Спасибо!

EDIT1:

Сделал следующее согласно ответу на раскрутку:

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

Тем не менее мне не удалось обнаружить персонажа. Любая проблема с этой реализацией? ‘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);

Итак, я просто проверяю 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

Так что шестнадцатеричное значение для STX / ETX отсутствует. Это означает, что нельзя использовать STX и ETX для проверки формирования сообщения.

1

Решение

Ну, STX и ETX не являются «последовательностями», они представляют собой отдельные символы. Таким образом, вы должны быть в состоянии использовать простой memchr() звоните для поиска персонажей.

символьные значения просто '\x02' для STX и '\x03' для ETX.

Обратите внимание, что вам нужно будет передать полученный размер. Поскольку (я предполагаю) нет гарантии, что частично полученное сообщение завершено 0, вы не можете использовать strchr(),

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]