Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
Windows 为什么需要IP_多播_IF和IPV6_多播_IF?_Windows_Sockets_Unix_Networking_Multicast - Fatal编程技术网

Windows 为什么需要IP_多播_IF和IPV6_多播_IF?

Windows 为什么需要IP_多播_IF和IPV6_多播_IF?,windows,sockets,unix,networking,multicast,Windows,Sockets,Unix,Networking,Multicast,例如,我的机器是多主机的,有两个网络接口: 无线局域网适配器WiFi:Ip:10.20.19.140 以太网适配器以太网:Ip:10.20.19.154 我创建了两个UDP套接字,一个监听(1),另一个监听(2)。假设接口已分配,那么为什么我需要IP\u MULTICAST\u IF和IPV6\u MULTICAST\u IF?IP\u MULTICAST\u IF或IPV6\u MULTICAST\u IF设置告诉套接字在哪个接口上发送其多播数据包。这是一个独立于使用bind()将套接字绑定到

例如,我的机器是多主机的,有两个网络接口:

  • 无线局域网适配器WiFi:Ip:10.20.19.140
  • 以太网适配器以太网:Ip:10.20.19.154

  • 我创建了两个UDP套接字,一个监听(1),另一个监听(2)。假设接口已分配,那么为什么我需要IP\u MULTICAST\u IF和IPV6\u MULTICAST\u IF?

    IP\u MULTICAST\u IF或IPV6\u MULTICAST\u IF设置告诉套接字在哪个接口上发送其多播数据包。这是一个独立于使用bind()将套接字绑定到的接口的设置,因为bind()控制套接字从哪个接口接收多播数据包


    (当然,BSD套接字API实现者可以假设套接字总是希望通过其接收数据包的同一接口发送数据包,但这会使许多用例变得更加困难;例如,如果您使用单个套接字从所有接口接收多播数据包(通过INADDR_ANY),然后当使用该套接字发送数据包时,您仍然需要一种方法来指定要通过哪个多播接口发送该数据包)

    我喜欢这样的假设,在这种情况下发送数据包可能有以下两种行为之一:1。发送所有接口2。像今天一样,使用默认接口发送。我还有一个问题:比如,我将UDP套接字绑定到相同的本地IP(10.20.19.154)和网络接口,但不同的端口(比如9999和9000)。两个套接字已加入相同的组地址:237.132.100.17:9999。然后从第一个套接字,如果我为组地址发送多播数据包。为什么第二个没有收到?当我把第二个的端口也改为绑定到9999时,它就起作用了。多播地址(不包括端口号)决定了数据包将发送到哪台计算机。一旦数据包到达计算机,tcp堆栈将其提供给绑定到数据包的目标端口字段指定的端口的任何套接字。(本例中为9999)