2012-04-25 11 views
2

ここに状況: 私は複数のクライアントと1つのホストを持っています。メッセージフォーマット&のサイズが指定されています。 すべてのクライアントが同時にメッセージを送信するとします。つまり、Nメッセージはホストに送信されます。複数のUDPメッセージを単一の謝礼者に送信

私の質問は:ホストは混在メッセージを受信しますか?ホストはメッセージAのビットを受信し、メッセージBからいくつかのビットが続きますか?または、メッセージは全体として受信されますか?あなたはソケット(例えば、recvfrom付き)からデータを読み取るとき

+0

すべて同じポートで送信しようとしていますか? –

+0

はい、すべてのクライアントがホスト上の同じポートに送信しています。私のプログラムでは、私はサーバー部分に1つのudpソケットしか持っていません。 – SDEZero

+0

それでは、私はあなたが同時に送信している状況があるとは思わない。 1つのクライアントがポートへの接続をオープンすると、他のクライアントはクローズされるまでその接続を行うことができなくなります。 –

答えて

1

その呼び出しから返されたすべてのデータを単一のソースからなります

感謝。

+1

異なるアプリケーションによって送信されたデータグラムは、受信アプリケーションで混合されません(基本的なスタックが正しく動作すると仮定すると、一般的なオペレーティングシステムのスタックと同様です)。 –

+0

@ArtSwri:あなたは現実的な見地から正しいです。再アセンブリが正しく行われないことは、間違いありません。しかし、私は、再アセンブリの結果ではない断片化の事例を観察したことは確かです。私は長年に渡ってスケッチの多いネットワーク状況でUDP問題に対処しなければならなかった。 –

+0

"ひとたびクライアントがポートへの接続を開くと、それが閉じられるまで他のクライアントはそれを行うことができません。" 2つのクライアントがmsgをホストに送信すると、ホストは一度に1つのmsgを処理でき、別のmsgをダンプするか、バッファされますか? – SDEZero

3

UDPデータグラムは常に「エンドクライアント」によって全体のデータグラムとして受信されます。つまり、送信者が10,000バイトのデータグラムを送信すると、10,000バイトのデータグラムとして受信されます(10,000バイトを足した小さなデータグラムの組み合わせではありません)。データグラム(すなわちIP)が取った経路は、送信中にデータグラムを断片化させる可能性があるが、受信UDP/IPスタックは、アプリケーションプログラムへの配信前にデータグラムを再構成する。

+0

いいえ、注文配信が必要なアプリケーションでは、データグラムの順序付けを復元する必要があります。 – lsalamon

+0

はい、データグラム全体がエンドポイント 'out of order'に配信される可能性があります。私の答えは、複数のデータグラムではなく、単一のデータグラムの断片について話しています。 –

関連する問題