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.
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)