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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top