私はC++を使用してクライアントサーバープログラムを開発しましたので、500kb以上を受信したいのですが、私のクライアントメッセージは "!"で終了します。 、私は私の最後のバイト(!)が受信するまで受信したいので、 これは私のコードですwork.whatそれと間違っていません。recv()を使用して大きなデータを受け取る方法は?
do
{
int num = recv(*csock, buf, bytesLeft,0);
if (num == 0)
{
break;
}
else if (num < 0 && errno != EINTR)
{
fprintf(stderr, "Exit %d\n", __LINE__);
exit(1);
}
else if (num > 0)
{
numRd += num;
buf += num;
bytesLeft -= num;
fprintf(stderr, "read %d bytes - remaining = %d\n", num, bytesLeft);
}
}
while (bytesLeft != 0);
fprintf(stderr, "read total of %d bytes\n", numRd);
1)非NUL終了バッファに対してstrcat()strlen()を使用しないでください。 2)CとC++を混在させない。3)診断出力は、stdoutではなくstderrに行かなければならない。 4)ありがとう。 – wildplasser
あなたのソケットは_blocking_または_non-blocking_ですか?デフォルトでは、すべてのソケットはブロックされています。つまり、データが受信されない場合、より多くのデータが到着するのを待つ間に 'recv'の呼び出しが_block_します。 –
経験則:使用しているすべてのコマンドのマニュアルを読んでください。 – hochl