1

TCPとUDPの両方を同時に利用して、シリアル化されたオブジェクトをインターネット経由で転送するネットワークライブラリを作成しています。

ライブラリ(簡略化)は、クライアントとサーバーに分割されます。

TCP要素を書くとき、私は問題がありません。シリアル化されたオブジェクトを送信するたびに、その受信オブジェクトのサイズをオブジェクト自体の前に送信し、NetworkStreamに十分なバイトがキューに入れられるまで待ちます。

ただし、UDPサーバーの作成は少し難しいです。質問があります:

行うとき:

data = udpClient.Receive(ref sender);

ここでサーバー側に何を期待できるかわかりません。この最初の例では、データが失われたり、間違って順序付けられたりすることはないと想定します。しかし、シリアル化したオブジェクトが複数のパケットに分割され、複数のクライアントから送信された場合はどうなりますか?たとえば、これら2つのイベントが同時に発生した場合:

  • クライアントAは10,000バイトのオブジェクトを送信します
  • クライアントBは12,000バイトのオブジェクトを送信します

それでは、このようなものをこの順序で(または十分に近い形で)受け取りますか?

  • クライアントAオブジェクトパート1/5
  • クライアントBオブジェクトパート1/6
  • クライアントAオブジェクトパート2/5
  • クライアントBオブジェクトパート2/6
  • 等...

もしそうなら、私は十分だと思うまで各クライアントのどこかに受け取ったデータを保存し、それからそれを逆シリアル化しようとすべきですか?

ありがとうございました

4

1 に答える 1

4

パーツの順序付けと分割を追加するまでに、TCPの再発明の道のりはかなり長いですが、長年の苦労して得た経験を使用する代わりに、自分で再発明する必要があります。

基本的に、UDPはあなたがやろうとしていることに本当に適していないように思えます。それは絶対的な要件ですか?

于 2012-05-28T16:27:35.817 に答える