es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener información de un socket UDP remoto? C# & IPv4

Tengo un hardware que envía información a la dirección 192.168.0.255 aproximadamente cada 5 segundos (En la siguiente imagen, el software Wireshark muestra el dispositivo con la dirección IP 192.168.0.241 enviando el mensaje “Hallo” a la dirección 192.168.0.255 en el puerto 7000):

Imagen de ejemplo

Por otro lado, tengo una aplicación de escritorio hecha en C# que intenta leer esa información de la siguiente manera:

int PORT = 7000;
udpClient = new UdpClient();
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT));

private async Task<string> getData()
{
   try
   {
        var from = new IPEndPoint(0, 0);
        while (true)
        {
           var recvBuffer = udpClient.Receive(ref from);
           string result= Encoding.UTF8.GetString(recvBuffer);
           if (result != null && result.Length > 0)
           {
               return result;
           }
        }
   }
   ...
}

No funciona (udpClient.Receive nunca devuelve información, parece como si no hubiera información en el socket aún), pero si abro una herramienta de software en mi PC que me permite escribir información en un socket UDP, el código funciona maravillosamente (udpClient.Receive captura la información enviada).

Otra imagen de ejemplo

¿Alguna sugerencia o comentario?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en el dispositivo de hardware que está enviando información a la dirección 192.168.0.255. La dirección de difusión UDP se utiliza para enviar datos a todos los dispositivos en la misma red, y parece ser que el dispositivo de hardware no está transmitiendo correctamente los datos.

    Una sugerencia sería verificar si el dispositivo de hardware está correctamente configurado para transmitir datos a la red. Además, puede ser útil utilizar una herramienta de monitoreo de red (como Wireshark) para verificar si los paquetes de datos del dispositivo de hardware están siendo transmitidos a la red.

    Si el dispositivo de hardware está correctamente configurado para transmitir datos y los paquetes están siendo transmitidos a la red, otra posibilidad podría ser la configuración del firewall que bloquea los paquetes entrantes. Puede ser útil revisar la configuración del firewall tanto en el dispositivo de hardware como en la PC para asegurarse de que se permitan los paquetes UDP entrantes.

    Por último, vale la pena mencionar que la aplicación de escritorio se está enlazando al puerto UDP 7000 y esperando paquetes entrantes utilizando el método udpClient.Receive. Dependiendo de la configuración del dispositivo de hardware, también puede ser útil verificar que el dispositivo de hardware esté enviando datos específicamente al puerto 7000.

Comments are closed.