我正在运行一个 UDP 客户端,它侦听多播 ip 230.10.10.10 端口 11111 的消息。如果我在与 UDP 广播器相同的服务器中运行客户端 java 代码,我就能够接收 UDP 消息。但是,如果我在同一域中的另一台服务器上运行它,我不会收到任何消息。
我正在使用 Windows Server 2008。请告诉我如何调试它?
我正在运行一个 UDP 客户端,它侦听多播 ip 230.10.10.10 端口 11111 的消息。如果我在与 UDP 广播器相同的服务器中运行客户端 java 代码,我就能够接收 UDP 消息。但是,如果我在同一域中的另一台服务器上运行它,我不会收到任何消息。
我正在使用 Windows Server 2008。请告诉我如何调试它?
谢谢大家的帮助。我现在已经解决了。解决方案是在 Listener 中调用 setInterface() 方法
DatagramSocket datagramSocket = new MulticastSocket(multicastPort);
((MulticastSocket) datagramSocket).setInterface(inetNicAddress);
广播器是多宿主的,有两个 IP 地址,监听器只有一个 IP。所以,当我在 setInterface 方法中设置监听器 IP 时,它工作正常。
但是我仍然不确定这是如何工作的,因为 setInterface 方法在广播器中被调用,因为它是多宿主的,没关系。但是为什么还要在监听器中设置它呢?. 任何建议都会有所帮助。
首先,UDP 不是有保证的交付协议。其次,UDP 数据包可能会在您的网络上被防火墙或过滤。
您可以从客户端计算机连接到端口 11111 上的服务器计算机吗?
问题也可能是多播数据包的 TTL。如果为 0,则只能在本地接收包裹。我建议您使用Wireshark之类的工具检查网络流量。如果这是问题所在,请将 TTL 值增加到 32。您可能还需要设置-Djava.net.preferIPv4Stack=true
.