1

我有多个 NIC 的服务器,运行 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;
}

首先,我需要使用什么作为网络接口地址?网络接口的本地地址(与 ipconfig 返回的相同)或网络接口的索引,我可以使用 GetAdaptersAddresses api 函数获得吗?

其次,这实际上可以在 Windows 上实现,还是我只是花时间?

更新 我刚刚阅读了有关 WSAJoinLeaf 功能的信息,我想知道,不可能只使用一个 NIC 进行多播。

4

2 回答 2

1

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

第二:是的,这绝对是可能的。:)

于 2009-04-09T01:53:28.693 回答
0

是的,这可行,您可以将GetAdaptersInfo用于仅 IPv4 接口,或将GetAdaptersAddresses用于两个系列。

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

于 2010-02-06T05:18:04.410 回答