我有两个使用多播的程序(MS VC++)-接收方和发送方。我通过WiFi在台式机(Windows 7)和上网本(Windows XP)之间进行了测试。台式计算机具有可在AP模式下工作的WiFi加密狗。如果在发送方程序的接口(interface)地址中指定INADDR_ANY,则会出现问题:多播无法从台式机到达上网本。如果我指定此WiFi接口(interface)的真实地址,而不是INADDR_ANY-则可以正常工作。
因此,我希望我的发送程序可以在所有接口(interface)上运行。我该怎么做?我必须为每个接口(interface)初始化单独的套接字吗?还是它有更优雅的可能性?
最佳答案
如先前的人们所说,您必须明确选择输出接口(interface)。如果要同时组播到不同的接口(interface),则需要多个套接字。在boost::asio中,相应的调用是:
boost::asio::ip::udp::socket* _write;
...
_write->set_option( ip::multicast::outbound_interface( ifAddr.to_v4()));