Как указать сетевой интерфейс для использования 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) означает, что любой локальный адрес является приемлемым.