为啥 java 多播接收器无法在 Windows XP 上接收数据包?

Posted

技术标签:

【中文标题】为啥 java 多播接收器无法在 Windows XP 上接收数据包?【英文标题】:Why java multicast receiver not able to receive packets on Windows XP?为什么 java 多播接收器无法在 Windows XP 上接收数据包? 【发布时间】:2013-10-02 12:00:33 【问题描述】:

我在 ip 224.2.2.3 和端口 8888 上的 java 中有一个 MulticastReceiver 和 MulticastSender。当我在 Windows XP 上运行接收器时,我无法接收数据包。我所有的 linux 接收器都按预期接收数据包。当我的发件人在 Windows 上时,一切都很好。

我在 XP 上关闭了防火墙。 我已将接口绑定到我希望数据包到达的套接字。 我的所有机器都在同一个网络上。

还有什么需要调整的吗?

【问题讨论】:

尝试将套接字绑定到 0.0.0.0。 绑定到 0.0.0.0 也没有帮助。 @EJP 我一定是试错了。将接收器更改为 0.0.0.0 确实有帮助。请张贴回答我会接受它。谢谢。 在使用 VMWare/Virtualbox 的机器上运行 sender 时,我必须将 sender 套接字也绑定到适当的接口。现在所有组合都运行良好 【参考方案1】:

如果您的接收器有多个网卡(例如安装了 VirtualBox),请降低第二个以太网卡的优先级。

开始 -> 控制面板 -> 网络设置 -> 更改适配器设置 -> Internet 协议属性 -> 高级 -> 取消选中自动度量并给出较高的值(例如 800)

【讨论】:

【参考方案2】:

将套接字绑定到 0.0.0.0,以便它可以通过所有接口接收多播。您可能还必须通过所有接口加入该组。

绑定到多播地址本身似乎是一种 Linux 主义。它不适用于 Windows。

【讨论】:

事实上我对 0.0.0.0 的观察是不同的。在 Windows XP 上,绑定到 0.0.0.0 可与 jdk 6 一起使用。在 ubuntu 上,我尝试使用 Openjdk 7,但它不起作用。在 Win 7 上,我尝试使用 jdk 6 它不起作用。最后我求助于绑定到用户提供的 IP。 @ManishSapariya 将套接字绑定到 0.0.0.0 适用于人类已知的每个平台。您将不得不进一步定义“不起作用”。【参考方案3】:

我在 Windows 2008 服务器上使用多播套接字发送器,并将接收器用作不同的网络设备,包括 PC。但是,从来没有遇到过在 Windows 7 专业版上使用 0.0.0.0 的挑战(不确定 XP)。我使用 226.x.x.x 地址。大多数 224.x.x.x 地址都被 IP 多播空间注册表占用(不确定 XP 是否不允许它们),默认情况下我已经看到它不适用于多播接收器。您的端口号似乎很好,符合允许的范围。

【讨论】:

以上是关于为啥 java 多播接收器无法在 Windows XP 上接收数据包?的主要内容,如果未能解决你的问题,请参考以下文章

Java 多播发送数据,不接收

为啥多播不起作用?

无法从 Windows ping 到多播地址

Windows Phone 8 上的 UDP 多播组

java * Windows 10,版本1703 * over * lo上的Java多播消息示例(软件环回接口1)*

使用 Ehcache 多播获取“无法分配请求的地址”java.net.SocketException