Estoy implementando un tipo de buscador de IP para un tipo particular de dispositivo multimedia de red. Quiero encontrar todos los dispositivos activos de ese tipo en la LAN, con su dirección IP y otros detalles.Recepción de respuesta (s) de N número de clientes en respuesta a una solicitud de difusión a través de UDP
El dispositivo tiene su propia forma de descubrimiento de dispositivos.
Funciona de la siguiente manera: Un cliente envía una solicitud de difusión a través de la LAN a través de UDP.
El número de puerto de destino es fijo.
En respuesta, todos los servidores en la LAN que entienden el formato de esta solicitud responderán a esta solicitud proporcionando información sobre ellos.
Estoy transmitiendo el mensaje de solicitud UDP usando sendto().
Ahora mi problema es que no sé cuántos dispositivos (es decir, servidores) responderán a la solicitud.
¿Cuántas veces tendré que llamar a recvfrom()?
¿Cuándo sabré que he manejado la respuesta de todos los dispositivos?
O, en general, ¿es recvfrom() la elección correcta para recibir respuesta de múltiples servidores?
¿Hay alguna forma mejor (o CORRECTA si estoy equivocado aquí) de lograr lo mismo?
Estoy programando en C/C++, planeando codificar para Windows y Linux.
Muchas gracias de antemano.
Editar: Así que con la ayuda de toda la programación de la red magos aquí, he encontrado la solución a mi problema :)
seleccione() es sólo la cosa para mí ...
Muchas gracias a todos ustedes que tomaron tiempo para ayudarme
Creo que, después de la fase de descubrimiento, ¿desea comunicarse con estos dispositivos? ¿Por qué no usar la multidifusión IP desde el principio (ver http://en.wikipedia.org/wiki/Multicast)? –
El servidor está implementado en firmware. No tengo más opción que seguir el protocolo establecido por el fabricante del dispositivo.Tengo que transmitir la solicitud a través de UDP :( – puffadder
Esto realmente me hace pensar en 'UPNP' o' Universal Plug and Play', http://fr.wikipedia.org/wiki/Universal_Plug_and_Play –