Pregunta

Tengo una pregunta acerca de Qt y tomas de red. Si tengo un equipo con varias Direcciones IP en redes diferentes, ¿Cómo se abre un socket UDP para un multicastgroup en una red adaptador / dirección IP específica.

por ejemplo:. 192.168.2.1 ip y 172.20.0.1 y quiero crear un socket que recibe paquetes de la 228.5.6.7 grupo de multidifusión en el adaptador de red 172.20.0.1

¿Fue útil?

Solución

Debe establecer que, en imr_interface como se muestra a continuación: (probablemente se configura en INADDR_ANY ahora)

struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("228.5.6.7");
mreq.imr_interface.s_addr = inet_addr("172.20.0.1");// <---- right here
...
QSocketDevice* sdev = new QSocketDevice(QSocketDevice::Datagram);
...
setsockopt(sdev->socket(), IPPROTO_IP, IP_ADD_MEMBERSHIP,(const char *)&mreq, sizeof(struct ip_mreq));
...

Otros consejos

Si se trata de un socket de escucha, puede utilizar unen a la dirección IP para obligar a éste a una dirección IP específica para escuchar en. Si se trata de un socket de cliente, el sistema operativo gestionar la interfaz derecho a crearla en llegar a esa dirección IP según las reglas de la tabla de enrutamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top