0

UDP 接続を介してデータグラムを受信するために、タイプ UDPClient のオブジェクトを作成しました。

 receivedNotificationSock = new UdpClient();

ただし、一度完了して receive メソッドを使用すると、次のようになります。

 receivedHostNameBuffer=receivedNotificationSock.Receive(ref receivedNotificationIP);

bind メソッドを呼び出さなければならないという例外が発生します。ただし、UDPClient クラスには bind メソッドはありません。この例外を克服するために何をすべきかについて、可能であればコードを教えてください。

4

3 に答える 3

1

ソケットについてもう少し知っておく必要があると思います。

すべてのソケットにはポート番号があります。まず、ソケットを作成しますが、それ自体ではほとんど役に立ちません。そこに浮かんでいるだけです。しかし、それをバインドし、ポート番号を割り当てます。 では便利です - データを送受信できるようになりました。

すべての UDP 通信は、ソースの IP とポート、および宛先の IP とポートのクワッド データ セットによって定義されることに注意してください。新しく作成されたソケットには、IP アドレスまたはポートがありません。バインディングにより、IP アドレスとポートが提供されます。

残念ながら、私は C# プログラマーではないので、あなたの質問に適切に答えることができません。しかし、少なくともそれが重要である理由を知っています。

于 2009-04-04T19:12:51.840 に答える
1

ポート番号を UDP クライアントのコンストラクターに渡します。

 receivedNotificationSock = new UdpClient(21000);

バインドを許可するようにファイアウォール設定を変更する必要がある場合がありますが、開発マシンでこれを最初に実行すると、通常はポップアップ ウィンドウが開きます。

于 2012-09-03T07:33:03.197 に答える
0

Socket proramming の場合、クライアント側とサーバー側で行う必要がある syscall のシーケンスを知る必要があります。

クライアントを書いている場合:

  1. 呼び出しでソケットを開きsocketます。

  2. connect次に、呼び出しでサーバーポートに接続します

  3. 接続が成功したら

  4. send次に、またはsendto またはを使用してリクエストをサーバーに送信します。write

  5. receiveその結果、またはを使用して読み取ることができるデータを受信します。read

サーバー側

  1. あなたが作成しますsocket

  2. bindそれをport

  3. を使用して、さまざまなクライアントからの着信接続をソケットでリッスンし始めますlisten。システムコールと同様に、接続をリッスンする非ブロッキングの方法がありselectます。

  4. 接続を確立すると、基本的にリクエストを読み取って処理を開始できます。

これは、役に立つと思われる C# の例です。

http://www.developerfusion.com/article/3918/socket-programming-in-c-part-1/

于 2012-05-25T01:08:57.130 に答える