Question

J'ai une question sur les sockets Qt et réseau. Si j'ai un ordinateur avec plusieurs IP-réseaux différents dans Adresses, comment puis-je ouvrir un socket udp pour une multicastgroup sur un réseau spécifique adaptateur / adresse IP.

par exemple:. Ip 192.168.2.1 et 172.20.0.1 et je veux créer un socket qui reçoit des paquets du groupe de multidiffusion 228.5.6.7 sur l'adaptateur réseau 172.20.0.1

Était-ce utile?

La solution

Vous devez définir que imr_interface comme indiqué ci-dessous: (probablement il est mis à INADDR_ANY maintenant)

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

Autres conseils

Si elle est une prise d'écoute, vous pouvez utiliser pour lier l'adresse IP pour se lier à une adresse IP spécifique à écouter. S'il est un socket client, le système d'exploitation de gérer l'interface droit de créer pour arriver à cette adresse IP selon les règles de la table de routage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top