私はTCPがストリームのようなデータ送信を提供していることを知っていますが、主な質問は、 - TCPを介してデータを送信する際にどのような状況が起こる可能性がありますか?
1.メッセージをNチャンクに分割してMTUサイズに合わせることができます。
2. 1つのrecvコールで2つのメッセージを読み取ることができます。TCPフラグメンテーション
次の状況がありますか?
MTUたとえば1500バイト。
クライアントコールは1498バイトのデータで送信されます。
クライアントコールは100バイトのデータで送信されます。
サーバーはrecvを呼び出し、1500バイトのデータを受信します。
サーバーはrecvを呼び出し、98バイトのデータを受信します。
したがって、2番目のクライアントからの2バイトの送信が最初のサーバーrecvで受信される状況になります。 foolowsとして定義
マイプロトコル:
4バイト - データ長
データコンテンツ。
4バイト(データ長)が2つのチャンクに分割されると思いますか?
それを分割しない場合でも、それはどんな違いを生むん。あなたのデータはすべて、目的地に正しく中継され、TCPによって保証されます。 http://en.wikipedia.org/wiki/Transmission_Control_Protocol – DumbCoder
TCPに関する限り、「メッセージ」はありません。あなたのコードにメッセージの概念があるならば、TCPは何も知らない。 –