Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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
Java 如果套接字必须已经绑定到NetworkInterface,那么为什么DatagramSocketImpl joinGroup方法接受NetworkInterface?_Java_Sockets_Networking_Network Programming - Fatal编程技术网

Java 如果套接字必须已经绑定到NetworkInterface,那么为什么DatagramSocketImpl joinGroup方法接受NetworkInterface?

Java 如果套接字必须已经绑定到NetworkInterface,那么为什么DatagramSocketImpl joinGroup方法接受NetworkInterface?,java,sockets,networking,network-programming,Java,Sockets,Networking,Network Programming,只是好奇。这是多余的吗?您还没有绑定到要使用的网络吗?当您绑定到0.0.0.0,现在只想侦听来自接口X的多播数据包时,可能就是这种情况 如果您被绑定到INADR_ANY(这是正常情况),则加入组IGMP消息将通过路由表所说的为多播地址提供最短路由的NIC接口发出。在多宿主主机中,您可能需要它通过所有NIC输出,因此您依次通过每个NIC将它们连接起来 如果您绑定到特定NIC,则在加入时指定网络接口是没有意义的 如果您绑定到多播地址本身,因此该套接字只能接收多播,而不能接收单播UDP,那么如果您希望

只是好奇。这是多余的吗?您还没有绑定到要使用的网络吗?当您绑定到0.0.0.0,现在只想侦听来自接口X的多播数据包时,可能就是这种情况

  • 如果您被绑定到INADR_ANY(这是正常情况),则加入组IGMP消息将通过路由表所说的为多播地址提供最短路由的NIC接口发出。在多宿主主机中,您可能需要它通过所有NIC输出,因此您依次通过每个NIC将它们连接起来

  • 如果您绑定到特定NIC,则在加入时指定网络接口是没有意义的

  • 如果您绑定到多播地址本身,因此该套接字只能接收多播,而不能接收单播UDP,那么如果您希望通过所有接口加入,则可能需要像(1)中那样进行循环


  • 我可以说只有在我未绑定时才需要NetworkInterface地址吗?我很想知道,如果我绑定到接口A,并使用接口B调用joinGroup,会发生什么情况。有什么想法吗?@chrisapotek(A)只要绑定()、连接()、发送()或接收(),您总是“绑定”到特定的NIC或INADR_Any。(b) 可能什么也不会发生,但这取决于TCP/IP中一个叫做“弱端系统模型”的神秘事物,这可能意味着您可以通过“错误”的接口接收多播。我一直在反对我在你的原始帖子中所描述的Linux反常现象,但在重读W.R.Stevens之后,我觉得绑定到m/c组地址可能是最好的选择,如果你的系统支持的话。