Как указать сетевой интерфейс для использования QUdpSocket?

У меня есть приложение, которое использует QUdpSocket отправлять широковещательные пакеты. Машина, отправляющая пакеты, имеет несколько сетевых интерфейсов.

К сожалению, я не смог выяснить, как получить QUdpSocket использовать правильный сетевой интерфейс. Где-то есть опция, которая позволяет мне точно указать, какой интерфейс использовать для отправки пакетов?

2 ответа

Каждая подсеть имеет свой широковещательный адрес. Поэтому я думаю, что вы можете отправлять широковещательные пакеты "напрямую" по адресам, таким как 10.255.255.255 или 192.168.255.255.

Вы на самом деле выбираете, какую сеть слушать в первом аргументе функции bind, address. Если вы выбираете, например, QHostAddress::AnyIPv4 это означает, что независимо от того, с какого интерфейса (лучше сказать, по какому IP-адресу) получен пакет, программа должна его перехватить. В противном случае вы можете ввести IP-адрес (или широковещательный адрес), на который должен быть отправлен пакет.

Для отладки и проверки этого вы можете использовать netstat перечислить открытые порты, как описано здесь: https://superuser.com/questions/529830/get-a-list-of-open-ports-in-linux

В результате команды netstat, Local Address это то, что вы ищете, указав, какой адрес прослушивается.

ПРИМЕЧАНИЕ. Адрес localhost в Local Address (например, 0.0.0.0 или 127.0.0.1) означает, что любой локальный адрес является приемлемым.

Другие вопросы по тегам