TCPサーバーを作成しています。1 回の Write ですべてのデータを送信したとしても、1 回の Read ですべてのデータを読み取ることができるとは限らないと聞いています。プロトコルが壊れる可能性があります。私の質問は、それは巨大なパケットの場合だけですか、それとも 1kb を分割するのでしょうか? 500バイト?どのサイズでも安全ですか?
質問する
197 次
2 に答える
2
1回の読み取りですべてのデータを読み取ることを期待することはできません。小さなMTUを設定することで、パッケージを任意に分割できます。
于 2013-03-19T19:34:54.510 に答える
1
TCP ソケットを使用する場合、送信される「パケット」を制御しません。ソケットとの間でバイトを読み書きするだけで、プロトコルはその送信方法とタイミングを制御します。
相手側が一度に受信できるデータ量には実際の最大値があります。これは「最大セグメント サイズ」と呼ばれます。これがどれだけ大きいかは、話している相手によって決まるため、わかりません。最大 1k セグメントまたは 500 バイト セグメントのみでデータを送信できる場合があります。両端を制御できない限り、知る方法はありません。
また、書き出すバイトを小さなセグメントに分割できるだけでなく、複数の小さな書き込みを実際に 1 つの大きなセグメントに結合することもできます。Nagle のアルゴリズムを参照してください。
于 2013-03-19T19:43:01.580 に答える