Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 来自特定网卡的UDP多播_Sockets_Winapi - Fatal编程技术网

Sockets 来自特定网卡的UDP多播

Sockets 来自特定网卡的UDP多播,sockets,winapi,Sockets,Winapi,我正在寻找一些网络专家来帮助我解决一个问题。我有许多计算机运行我的软件,它使用UDP多播。如果计算机仅连接到一个网络(网络A),则此操作正常。我的计算机(也在运行上述软件)将在XXXX端口监听多播。这台计算机有两个网卡,当我把它连接到另一个网络B时,我的软件就乱了套。问题是我不知道给定的多播来自哪个网络。如果我发送多播,我不能告诉它使用网络a而不是网络B,反之亦然 我的问题是: 有没有办法区分来自不同网络的数据包 有没有办法将多播发送到网络a而不是网络B 我使用C++和Win32套接字。感谢所有

我正在寻找一些网络专家来帮助我解决一个问题。我有许多计算机运行我的软件,它使用UDP多播。如果计算机仅连接到一个网络(网络A),则此操作正常。我的计算机(也在运行上述软件)将在XXXX端口监听多播。这台计算机有两个网卡,当我把它连接到另一个网络B时,我的软件就乱了套。问题是我不知道给定的多播来自哪个网络。如果我发送多播,我不能告诉它使用网络a而不是网络B,反之亦然

我的问题是:

  • 有没有办法区分来自不同网络的数据包
  • 有没有办法将多播发送到网络a而不是网络B

  • 我使用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可能会解决我的问题。