我有多个网卡的服务器,运行Windows Server 2003.我的应用程序接收多播数据包,但现在我需要从一个网络接口接收多播数据包。我认为这可以提供帮助,但我有一些问题。
ip_mreq mreq;
mreq.imr_multiaddr.s_addr = multicast group address
mreq.imr_interface.s_addr= network interface address
if (setsockopt( socet
, IPPROTO_IP
, IP_ADD_MEMBERSHIP
, (const void *)&mreq
, sizeof(mreq)) < 0)
{
std::cerr << "setsockopt error" << std::endl;
}
首先,我需要将什么用作网络接口地址?使用GetAdaptersAddresses api函数可以获得的网络接口的本地地址(与ipconfig返回的相同)或网络接口的索引?
其次,这可以用窗户实现,还是我只是花时间?
更新 我刚刚读到了WSAJoinLeaf函数,我想知道,不可能只使用一个NIC进行多播。
答案 0 :(得分:1)
第一:你的选择。见http://msdn.microsoft.com/en-us/library/ms738695(VS.85).aspx
第二:是的,这肯定是可能的。 :)
答案 1 :(得分:0)
是的,这可以使用GetAdaptersInfo仅用于IPv4接口,或GetAdaptersAddresses用于两个家庭。
请注意,mreq仅按地址而不是索引指定接口,ip6_mreq和GROUP_REQ(系列不可知)版本更喜欢索引,因为IPv6允许您拥有多个匹配的链路本地地址,但可以连接到不同的网络。