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
- 等...
もしそうなら、私は十分だと思うまで各クライアントのどこかに受け取ったデータを保存し、それからそれを逆シリアル化しようとすべきですか?
ありがとうございました