Como faço para abrir um soquete udp para uma multicastgroup com Qt?
-
19-09-2019 - |
Pergunta
Eu tenho uma pergunta sobre o Qt & rede soquetes. Se eu tiver um computador com várias IP-Endereços em diferentes redes, como faço para abrir um soquete udp para uma multicastgroup em uma rede-adaptador específico / endereço IP.
por exemplo:. Ip 192.168.2.1
e 172.20.0.1
e eu quero criar um soquete que recebe pacotes do 228.5.6.7
grupo multicast na placa de rede 172.20.0.1
Solução
Você deve definir isso em imr_interface
como mostrado abaixo: (provavelmente ele é definido como INADDR_ANY
agora)
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));
...
Outras dicas
Se é um socket de escuta, você pode usar se ligam a endereços IP para vinculá-lo a um endereço IP específico para escutar. Se é um socket de cliente, o sistema operacional gerenciar a interface certa para criá-lo para alcançar esse endereço IP como por roteamento regras da tabela.