2010-11-06 22 views
5

Estoy creando una aplicación de servidor de cliente usando c sharp. El servidor está utilizando tcplistener con un número de puerto fijo. el cliente se conecta al servidor usando tcpclient. Una vez conectado, tanto el cliente como el servidor se comunican usando esta conexión. La aplicación luego crea una nueva conexión udp para enviar y recibir mensajes. Dado que el servidor supone que debe aceptar múltiples conexiones desde un solo cliente, tengo que diferenciar cada conexión con un puerto diferente. Para hacer esto, primero tengo que 1. En el servidor, cree un udpclient (use automáticamente el puerto udp no utilizado en el servidor). 2. envía el número de puerto utilizado por el servidor udpclient al cliente. 3. el cliente envía datos al servidor utilizando el número de puerto especificado.¿Cómo saber el número de puerto utilizado por C# UdpClient?

El problema es, ¿cómo crear un cliente udp donde se puede saber el número de puerto utilizado?

Respuesta

12

Éstos son la respuesta a mis preguntas.

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

0 como el constru El parámetro ctor configura la aplicación para que encuentre automáticamente el puerto udp libre. ((IPEndPoint)udpClient.Client.LocalEndPoint)).Port.ToString() se usa para encontrar el número de puerto.

+0

Lamentablemente, al menos en .NET 4.0, el sistema nunca establece el campo Puerto de un socket UDP. Y como es una propiedad de solo obtención, tampoco puede establecerla manualmente. –

+0

OOPS. Debería haber dicho: el sistema no establece el puerto en sockets UDP RAW cuando se une. lo hace en DGRAM Sockets. –

0

Creo que no puede usar UdpClient en el servidor para lograr su objetivo, ya que no tiene un método Bind para enlazar a un IPEndPoint.

Debe usar un objeto Socket para hacerlo, lo que permite controlar un puerto para los mensajes UDP entrantes. Entonces, sin duda, puede decirle al cliente qué puerto monitorea el servidor.

2

Creo que puede usar la propiedad Socket.RemoteEndPoint para saber qué IP/Puerto del cliente está conectado al servidor (conoce su IP/puerto local porque inició el socket en ese puerto, pero también está disponible a través de la propiedad LocalEndPoint.

también ver la MSDN UdpClient para un ejemplo sencillo de cómo utilizar el UdpClient correctamente.

Cuestiones relacionadas