Как открыть сокет udp для многоадресной группы с помощью Qt?

StackOverflow https://stackoverflow.com/questions/1176978

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня вопрос о Qt и сетевых сокетах.Если у меня есть компьютер с несколькими IP-адресами в разных сетях, как мне открыть сокет udp для группы многоадресной рассылки на определенном сетевом адаптере/IP-адресе.

например:IP 192.168.2.1 и 172.20.0.1 и я хочу создать сокет, который будет получать пакеты из группы многоадресной рассылки 228.5.6.7 на 172.20.0.1 Сетевой адаптер.

Это было полезно?

Решение

Вы должны установить это в imr_interface как показано ниже:(вероятно, установлено INADDR_ANY сейчас)

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

Другие советы

Если это прослушивающий сокет, вы можете использовать привязку к IP-адресу, чтобы привязать его к определенному IP-адресу для прослушивания.Если это клиентский сокет, ОС управляет правильным интерфейсом для его создания для достижения этого IP-адреса в соответствии с правилами таблицы маршрутизации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top