2012-01-09 7 views
1

私はポートにUdpClientを持っています。私はそれを使ってデータを送信します。UdpClient受信バッファ。それはいつパケットを落としますか?

99%の時間は、着信パケットは気にしません。しかし、まれに、私の送信パケットの1つからの応答を聞く必要があります。

私の最初の考えは、sendの直後に簡単にUdpClient.Recieve()を呼び出すことです。返信が見つかるまで、パケットをループします。

しかし、私は受信バッファがUdpClientでどのように機能するのか疑問に思っています。私は受け取ったパケットを普通に処理していないので、バッファを一定のサイズにすると、それらをバッファしなければならないと思います。私は、この返事が電信線に到着した直後、しかし私のRecieve()コールが実行される前に起こるかもしれないと心配しています。

受信したすべてのパケットを非同期的に処理する唯一の解決策だと思いますが、このような単純な状況では過度のことです。

誰でもUdpClientのバッファリング動作を知っていますか? (例えば、バッファ全体を破棄するのか、最も古いデータだけを廃棄するのかなど)。 MSDNは私が見つけることができる詳細を提供しません。

答えて

1

ネットワークドライバは、さまざまなサイズのリングバッファを使用します。

Ring Buffer: [Slot 1] [ Slot 2] [Slot 3] 
Incoming Data: AAAA BBBB CCCC DDDD EEEE FFFF 

Ring Buffer: [DDDD] [EEEE] [FFFF] 

正確なサイズは通常ドライバに依存しますが、それはあなたの質問とは関係ありません。

実際に応答を待っているときは、RECV処理ループを実行するだけでよいはずです。

関連する問題