2

TCPサーバーを作成しています。1 回の Write ですべてのデータを送信したとしても、1 回の Read ですべてのデータを読み取ることができるとは限らないと聞いています。プロトコルが壊れる可能性があります。私の質問は、それは巨大なパケットの場合だけですか、それとも 1kb を分割するのでしょうか? 500バイト?どのサイズでも安全ですか?

4

2 に答える 2

2

1回の読み取りですべてのデータを読み取ることを期待することはできません。小さなMTUを設定することで、パッケージを任意に分割できます。

于 2013-03-19T19:34:54.510 に答える
1

TCP ソケットを使用する場合、送信される「パケット」を制御しません。ソケットとの間でバイトを読み書きするだけで、プロトコルはその送信方法とタイミングを制御します。

相手側が一度に受信できるデータ量には実際の最大値があります。これは「最大セグメント サイズ」と呼ばれます。これがどれだけ大きいかは、話している相手によって決まるため、わかりません。最大 1k セグメントまたは 500 バイト セグメントのみでデータを送信できる場合があります。両端を制御できない限り、知る方法はありません。

また、書き出すバイトを小さなセグメントに分割できるだけでなく、複数の小さな書き込みを実際に 1 つの大きなセグメントに結合することもできます。Nagle のアルゴリズムを参照してください。

于 2013-03-19T19:43:01.580 に答える