3

C# の UdpClient を使用して、着信 UDP パケットをリッスンしたいと考えていました。任意の IP および任意のポートからパケットを受信したい。

私は次のことを試しました:

UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);

しかし、成功しませんでした。

誰が何が悪いのか知っていますか?前もって感謝します!

4

3 に答える 3

6

どのポートでも受信しますか? それは非常識です。他のアプリケーションからのメッセージが殺到します ( 1 秒間にシステムに渡されるメッセージの数を知るには、TcpViewを試してください!)

ポートを指定する必要があります。ポートは識別子のようなものです -- このパケットはこのプログラム用です (ポート番号で識別されます)

システムに送信ポートを選択するように要求するため、任意のポートで送信することは賢明です。これは、送信者としてのアプリケーションにとってそれほど重要ではありません

于 2010-07-21T15:49:41.467 に答える
5

リッスンしたい特定のポートを特定し、それらのポートでリッスンを開始することをお勧めします。受信したデータグラムで何が行われるかによって、リッスンしているポートごとに新しいポートを作成してそこで処理するか、同期化された ( を使用して) キューまたはリストにThreadエンキューして、中央で処理するのが最善/最も簡単な場合があります。lockスレッド。

ただし、ポートを制限する必要があります。それらすべてを聞くことは不可能でしょう。

Wiresharkつまり、 SDK/API のようなものを使用Winpcapして、ネットワーク アダプターから直接 UDP パケットを「盗聴」することができます。以前は .NET アプリケーション内で問題なく動作していました。

それが役立つことを願っています。

于 2010-07-21T15:54:04.427 に答える
4

特定のポートでリッスンする必要があります。

ゼロを渡すと、任意のポートが割り当てられるため、そのポート宛ての UDP データグラムのみを受信します。つまり、何も受け取れません。

何かを受け取った場合、送信者に関する情報が IPEndPoint に入力されます。初期値は、送信者を制限するために使用できます。

于 2010-07-21T15:46:09.873 に答える