只是好奇。这是多余的吗?您还没有绑定(bind)到您要使用的网络吗?也许这是您绑定(bind)到 0.0.0.0 并且现在只想监听来自接口(interface) X 的多播数据包的情况?
最佳答案
如果您绑定(bind)到 INADDR_ANY(这是正常情况),则加入组 IGMP 消息将通过路由表显示提供到多播地址的最短路由的任何 NIC 接口(interface)发出。在多宿主主机中,您可能需要它通过所有 NIC 出去,因此您可以循环遍历它们,依次通过每个 NIC 加入。
如果您绑定(bind)到特定 NIC,则在加入时指定网络接口(interface)是没有意义的。
如果您绑定(bind)到多播地址本身,因此该套接字只能接收多播,而不是单播 UDP,如果您想通过所有接口(interface)加入,则可能需要像 (1) 中那样循环。
关于java - 如果套接字必须已经绑定(bind)到它,为什么 DatagramSocketImpl joinGroup 方法需要一个 NetworkInterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469036/