Sockets 来自特定网卡的UDP多播
我正在寻找一些网络专家来帮助我解决一个问题。我有许多计算机运行我的软件,它使用UDP多播。如果计算机仅连接到一个网络(网络A),则此操作正常。我的计算机(也在运行上述软件)将在XXXX端口监听多播。这台计算机有两个网卡,当我把它连接到另一个网络B时,我的软件就乱了套。问题是我不知道给定的多播来自哪个网络。如果我发送多播,我不能告诉它使用网络a而不是网络B,反之亦然 我的问题是:Sockets 来自特定网卡的UDP多播,sockets,winapi,Sockets,Winapi,我正在寻找一些网络专家来帮助我解决一个问题。我有许多计算机运行我的软件,它使用UDP多播。如果计算机仅连接到一个网络(网络A),则此操作正常。我的计算机(也在运行上述软件)将在XXXX端口监听多播。这台计算机有两个网卡,当我把它连接到另一个网络B时,我的软件就乱了套。问题是我不知道给定的多播来自哪个网络。如果我发送多播,我不能告诉它使用网络a而不是网络B,反之亦然 我的问题是: 有没有办法区分来自不同网络的数据包 有没有办法将多播发送到网络a而不是网络B 我使用C++和Win32套接字。感谢所有
我使用C++和Win32套接字。感谢所有回复您的人。
您应该在加入组的一个界面上侦听多播数据包。您应该显式地设置用于发送多播数据包的接口(否则,它们将作为其他所有内容、默认路由等进行路由)。这两种方法都是通过调用setsockopt
来实现的。以下是您的一些链接:
- -讨论设置“发送”接口
- -讨论“发送”和“接收”接口
免责声明:无可否认,这些链接以Unix为中心,因此您的Windows里程可能会有所不同:)去年,我们在冗余NIC上使用MC UDP进行项目时,发现了类似的问题。在与winsock进行了一番斗争之后,我们的最终解决方案是使用DOS命令
route
route add 224.x.x.x ... [desired gateway] METRIC 1
这确保了流量只在我们想要的界面上流出
我意识到这可能不是您想要的,但它至少可以是一个权宜之计,因为您需要实施另一个修复。在多宿主主机上,您需要依次通过所有接口或通过您关心的所有接口加入多播组。如果您对源网络感兴趣,可以使用多个M/C套接字,每个套接字绑定到不同的接口、相同的端口,并且每个套接字都加入到组中;然后,接收套接字本身会告诉您任何传入流量来自哪个网络。实际上,这些链接是相关的。使用:setsockopt和IP_MULTICAST_IF可能会解决我的问题。