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

标签 java sockets networking network-programming

只是好奇。这是多余的吗?您还没有绑定(bind)到您要使用的网络吗?也许这是您绑定(bind)到 0.0.0.0 并且现在只想监听来自接口(interface) X 的多播数据包的情况?

最佳答案

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

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

  3. 如果您绑定(bind)到多播地址本身,因此该套接字只能接收多播,而不是单播 UDP,如果您想通过所有接口(interface)加入,则可能需要像 (1) 中那样循环。

关于java - 如果套接字必须已经绑定(bind)到它,为什么 DatagramSocketImpl joinGroup 方法需要一个 NetworkInterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469036/

相关文章:

java - 从套接字以小端字节顺序读取无符号整数

java - 用Java检测所有可用网络的广播地址

c - C中的网络状态

java - 扫描多个输入时无此类元素异常

java - 无法验证用户是否是 Google Apps 中的管理员

Java ArrayList 序列化问题

networking - 降低网络连接质量的工具?

java.lang.NumberFormatException : null error in java while generating invoice number from oracle db

java - 流媒体问题: Best way to get property out of a List of Lists

c - 使用 C 语言通过套接字编程负载均衡器