如何仅使用一个NIC接收ip多播

时间:2009-04-07 07:38:35

标签: windows network-programming winsock multicast

我有多个网卡的服务器,运行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进行多播。

2 个答案:

答案 0 :(得分:1)

第一:你的选择。见http://msdn.microsoft.com/en-us/library/ms738695(VS.85).aspx

第二:是的,这肯定是可能的。 :)

答案 1 :(得分:0)

是的,这可以使用GetAdaptersInfo仅用于IPv4接口,或GetAdaptersAddresses用于两个家庭。

请注意,mreq仅按地址而不是索引指定接口,ip6_mreq和GROUP_REQ(系列不可知)版本更喜欢索引,因为IPv6允许您拥有多个匹配的链路本地地址,但可以连接到不同的网络。