来自特定网卡的UDP组播

时间:2010-10-29 17:09:00

标签: sockets winapi

我正在寻找一些帮助我解决问题的网络大师。我有很多运行我的软件的计算机使用UDP多播。如果计算机仅连接到一个网络(网络A),这可以正常工作。我的计算机(也运行所述软件)将在端口XXXX上侦听多播。这台计算机有两个网卡,当我将它连接到另一个网络,网络B时,我的软件变得混乱。问题是我不知道给定多播来自哪个网络。如果我发出多播,我不能告诉它使用网络A而不是网络B,反之亦然。

我的问题:

  1. 有没有办法区分来​​自不同网络的数据包?
  2. 有没有办法将多播发送到网络A而不是网络B?
  3. 我正在使用C ++和Win32套接字。感谢任何回复的人。

3 个答案:

答案 0 :(得分:2)

您应该在加入该组的一个接口上侦听多播数据包。您应该明确设置用于发送多播数据包的接口(否则它们将被路由为其他所有路由,默认路由等)。两者都是通过setsockopt电话完成的。以下是一些链接:

免责声明:这些链接无疑是以Unix为中心的,因此您的Windows里程可能会有所不同:)

答案 1 :(得分:0)

去年在冗余网卡上使用MC UDP处理项目时,我们发现了类似的问题。在与winsock进行了一些斗争后,我们的最终解决方案是使用DOS命令优先处理流量route

route add 224.x.x.x  ... [desired gateway] METRIC 1

这确保了流量仅在我们想要的接口上消失。

我意识到这可能不是你想要的,但是当你实施另一个修复时,它至少可以成为权宜之计。

答案 2 :(得分:0)

在多宿主主机上,您需要按顺序通过所有接口加入组播组,或者通过您关注的所有接口加入组播组。如果您对原始网络感兴趣,可以使用多个M / C套接字,每个套接字绑定到不同的接口,相同的端口,并且每个接口都加入该组;然后接收套接字本身会告诉您任何传入流量来自哪个网络。