c# udpclient

c# - Recibe mensajes continuamente usando udpClient



(3)

Para los métodos más nuevos que usan TAP en lugar del método Begin / End, puede usar lo siguiente en .Net 4.5

¡Bastante sencillo!

Método asíncrono

private static void UDPListener() { Task.Run(async () => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var receivedResults = await udpClient.ReceiveAsync(); loggingEvent += Encoding.ASCII.GetString(receivedResults.Buffer); } } }); }

Método sincrónico

Como se aplica al método asynchronous anterior, esto también se puede implementar en synchronous método synchronous de una manera muy similar:

private static void UDPListener() { Task.Run(() => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); var receivedResults = udpClient.Receive(ref remoteEndPoint); loggingEvent += Encoding.ASCII.GetString(receivedResults); } } }); }

Estaba buscando la mejor solución para recibir y procesar mensajes a través de la clase UdpClient en C# . ¿Alguien tiene alguna solución para esto?


Prueba este código:

//Client uses as receive udp client UdpClient Client = new UdpClient(Port); try { Client.BeginReceive(new AsyncCallback(recv), null); } catch(Exception e) { MessageBox.Show(e.ToString()); } //CallBack private void recv(IAsyncResult res) { IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 8000); byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); //Process codes MessageBox.Show(Encoding.UTF8.GetString(received)); Client.BeginReceive(new AsyncCallback(recv), null); }


Puedo recomendar dos enlaces sobre esta solución que me fueron útiles.

Relacionados con PC

Desbordamiento de pila

La primera es una solución realmente fácil, pero tenga cuidado al modificarla, ya que la recepción continua solo funcionará si algún paquete UDP se envía como el primero al dispositivo "remoto". Para la escucha continua, agregue la línea de código "udp.BeginReceive (nuevo AsyncCallback (UDP_IncomingData), udp_ep);" después de cada lectura de datos entrantes para habilitar la nueva recepción de paquetes UDP.

La segunda es una buena solución para usar las direcciones IP de multidifusión (239.255.255.255 - 240.0.0.0)