我正在寻找一些帮助我解决问题的网络大师。我有很多运行我的软件的计算机使用UDP多播。如果计算机仅连接到一个网络(网络A),这可以正常工作。我的计算机(也运行所述软件)将在端口XXXX上侦听多播。这台计算机有两个网卡,当我将它连接到另一个网络,网络B时,我的软件变得混乱。问题是我不知道给定多播来自哪个网络。如果我发出多播,我不能告诉它使用网络A而不是网络B,反之亦然。
我的问题:
我正在使用C ++和Win32套接字。感谢任何回复的人。
答案 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套接字,每个套接字绑定到不同的接口,相同的端口,并且每个接口都加入该组;然后接收套接字本身会告诉您任何传入流量来自哪个网络。