私はc++ソケットコードを書いています、そして私はいくつかの助けが必要です!私のプログラムでは、メッセージのサイズがわかりません。ファイルの一部またはファイル自体を送信する可能性があります。ファイルは巨大なファイルである可能性があるため、パケットの最大サイズを指定する必要があります。最大値を超えた場合、複数に分割しますか?
2 に答える
TCP
次の理由により、使用時に「パケット」と「メッセージ」について考えるのは決して建設的ではありません。
- ネットワーク エンジンには、最適なセグメント サイズを決定する独自の方法があります。
- セグメント サイズはアプリケーション コードに影響しません。受信 TPC は、データを受信プロセスに渡す前にセグメントを自由に結合できます。
TCP を設計どおりに表示する必要があります。つまり、信頼できるバイトストリームサービスです。したがって、十分な大きさのブロックを作成するだけで、エンジンとその無数のルールがそれを処理します。
問題は少し曖昧ですが、アプローチは普遍的なようです。送信機は、受信機が期待するバイト数の指示を送信する必要があります。受信者は、この表示が表示されることを期待してから、その数のバイトを受信する準備をする必要があります。
パケットサイズに関しては、通常、アプリケーションはバイトがネットワーク上でどのように配信されるか自体については気にしませんが、アプリケーションは呼び出しを行わないことsend
やrecv
システムコールを何度も行うことを気にする場合があります。これは、効率がスケーラビリティの鍵となる並行サーバーでは特に重要です。したがって、システムコールが多すぎないように十分な大きさのバッファが必要ですが、データがカーネルバッファに排出されるのを長時間ブロックするほど大きくはありません。通常、send / recvソケットのバッファサイズを一致させるだけで十分ですが、ネットワークの帯域幅と遅延、受信者がデータを排出する速度、接続ごとに許可するタイムスライスなど、他の要因によって異なります。同時実行中に処理されます。