c ++でrecv()によって受信されたメッセージでSTX(テキストの開始)およびETX(テキストの終了)文字シーケンスを検出する方法はありますか? 完全なメッセージを再作成できるように、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:
サンプル メッセージの次の 16 進値を取得しました。
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 の 16 進値は存在しません。つまり、メッセージの形成を確認するために STX と ETX を使用することはできません。