为什么DatagramSocketImpl joinGroup方法需要一个NetworkInterface,如果套接字必须已绑定到它?

只是好奇。 那是多余的吗? 你有没有绑定到你想要使用的网络? 也许这就是你绑定到0.0.0.0并且现在只想从接口X监听多播数据包的情况?

  1. 如果您绑定到INADDR_ANY(这是正常情况),则连接组IGMP消息将通过路由表所指示的最短路由到达多播地址的任何NIC接口。 在多宿主主机中,您可能需要它通过所有NIC出去,因此您可以依次通过它们循环连接。

  2. 如果您绑定到特定NIC,则在加入时指定网络接口没有意义。

  3. 如果您自己绑定了多播地址,那么该套接字只能接收多播,而不是单播UDP,如果您想通过所有接口加入,则可能需要按(1)进行循环。