クライアントからのリクエストをtcpプロトコルで処理しているのですが、「send」機能を使用中にコンテンツの一部が欠落する現象を発見しました。コードは仲間です:
_stprintf(cData,"[%s]",send_back);
memset(send_back,0,sizeof(cData));
int send_count;
if((send_count=send(service_sock,cData,_tcslen(cData),0))!=SOCKET_ERROR){
fwrite(cData,sizeof(char),_tcslen(cData),hFile);
fflush(hFile);
g_log->print_log("%c%c%c%c",cData[0],cData[1],cData[2],cData[send_count-1]);
g_log->print_log("buffer len is :%d , send %d bytes",_tcslen(cData),send_count);
fclose(hFile);
memset(cData,0,sizeof(cData));
return true;
}
send 関数は常に成功し、_tcslen(cData) の値は send_count に等しく、cData[send_count-1] は ']' です。しかし、Wireshark (キャプチャ ツール) を使用してソケットから送信されたパケットをキャプチャすると、']' の文字を含む一部のコンテンツが常に欠落していることがわかりました。コンテンツは JSON プロトコルによってカプセル化されるため、「]」が重要です。毎回送信される合計サイズは 8900 バイトです。しかし、リクエスト項目を 1 回 (前は 100) から 50 に変更すると、何も漏れがなく、返送のサイズは約 4000 バイトです。なぜこれが起こったのかわかりません。
私のログ ファイルから、'cData' という名前の配列にすべてのコンテンツが含まれていることは確かですが、wireshark によってキャプチャされたパケットのコンテンツが完全ではないのはなぜですか?