8

私はcsharpを使用してクライアントサーバーアプリケーションを作成しています。サーバーは、固定ポート番号のtcplistenerを使用しています。クライアントはtcpclientを使用してサーバーに接続します。接続されると、クライアントとサーバーの両方がこの接続を使用して通信します。次に、アプリケーションはメッセージを送受信するための新しいudp接続を作成します。サーバーは単一のクライアントからの複数の接続を受け入れることを想定しているため、異なるポートで各接続を区別する必要があります。これを行うには、最初に1.サーバーでudpclientを作成する必要があります(サーバーで未使用のudpポートを自動的に使用します)。2.サーバーudpclientが使用するポート番号をクライアントに送信します。3.クライアントは、指定されたポート番号を使用してサーバーにデータを送信します。

問題は、使用されているポート番号を知ることができるudpclientを作成する方法です。

4

3 に答える 3

18

これが私の質問に対する答えです。

UdpClient udpClient = new UdpClient(0));
Console.WriteLine("UDP port : " + ((IPEndPoint)udpClient.Client.LocalEndPoint).Port.ToString());

コンストラクターパラメーターとして0を使用すると、アプリは空きudpポートを自動的に検索するように設定されます。((IPEndPoint)udpClient.Client.LocalEndPoint)).Port.ToString()ポート番号を見つけるために使用されます。

于 2010-11-06T20:11:58.790 に答える
2

Socket.RemoteEndPointプロパティを使用して、サーバーに接続されているクライアントのIP /ポートを知ることができると思います(ローカルIP /ポートは、そのポートでソケットを開始したのでわかりますが、LocalEndPointからも利用できます)。財産。

UdpClientを適切に使用する方法の簡単な例については、MSDNUdpClientも参照してください。

于 2010-11-06T07:50:39.000 に答える
0

IPEndPointにバインドするためのBindメソッドがないため、サーバー側でUdpClientを使用して目標を達成することはできないと思います。

これを行うには、Socketオブジェクトを使用する必要があります。これにより、着信UDPメッセージのポートを監視できます。そうすれば、サーバーが監視しているポートをクライアントに伝えることができるのは間違いありません。

于 2010-11-06T07:23:13.933 に答える