1

UdpClientをポートに配置しています。データの送信に使用します。

99%の時間、着信パケットは気にしません。ただし、まれに、送信したパケットの1つからの応答をリッスンする必要があります。

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

ただし、UdpClientで受信バッファーがどのように機能するのか疑問に思っています。私は受信したパケットを正常に処理していないので、それらをバッファリングし、バッファが特定のサイズに達したときにそれらを破棄する必要があると思います。この破棄は、応答がネットワークに到着した直後で、Recieve()呼び出しが実行される前に発生する可能性があるのではないかと心配しています。

受信したすべてのパケットを非同期で継続的に処理することを私が考えることができる唯一の解決策ですが、これはそのような単純な状況ではやり過ぎのようです。

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

4

1 に答える 1

1

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

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

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

正確なサイズは通常、ドライバーによって異なりますが、それはあなたの質問とは無関係です。

実際に応答を待っているときにのみ、RECV処理ループを実行しても問題ありません。

于 2012-01-09T13:52:43.577 に答える