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

У меня есть две программы (MS VC ++), которые используют многоадресную передачу — получатель и отправитель. Я тестирую его между настольным ПК (Windows 7) и нетбуком (Windows XP) через WiFi. Настольный ПК имеет WiFi ключ, который работает в режиме AP. Если я укажу INADDR_ANY в адресе интерфейса в программе-отправителе, у меня возникнет проблема: многоадресная рассылка не достигает нетбука с настольного компьютера. Если я укажу реальный адрес этого интерфейса WiFi вместо INADDR_ANY — он работает нормально.

Итак, я хочу, чтобы моя программа-отправитель могла работать на всех интерфейсах. Как я могу это сделать? Я должен инициализировать отдельный сокет для каждого интерфейса? Или, может быть, это более элегантная возможность?

1

Решение

Как говорили предыдущие люди, вы должны явно выбрать выходной интерфейс. Если вы хотите выполнять многоадресную передачу на разные интерфейсы одновременно, вам понадобится несколько сокетов. В boost :: asio соответствующий вызов:

boost::asio::ip::udp::socket*  _write;
...
_write->set_option( ip::multicast::outbound_interface( ifAddr.to_v4()));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]