【发布时间】:2014-01-25 13:55:56
【问题描述】:
我在让 UDP 多播发送从 Windows 8.1 工作时遇到问题。
以下简单的测试程序可在同一主机上运行 Windows 7 或 Ubuntu 13 的接口桥接虚拟机中运行。因此,我确信问题不在于 java 测试程序或物理网络配置。
import java.net.*;
public class multicast_send {
public static void main(String[] args) throws Exception {
DatagramSocket socket = null;
DatagramPacket outPacket = null;
socket = new DatagramSocket();
String msg = "Multicast Test";
outPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, InetAddress.getByName("230.0.0.1"), 4446);
socket.send(outPacket);
System.out.println("Server sent : " + msg);
socket.close();
}
}
windows 8.1 下的失败表现为静默失败,即消息只是没有到达远程主机。
我在 Windows 8.1 主机上使用了 WireShark,但没有看到任何证据表明正在发送 UDP 数据包。
Windows 8.1 防火墙已禁用。
我尝试了一系列多播地址和端口,结果相同(适用于 Win7、Ubuntu,而不是 Windows 8.1)
通过浏览互联网,我注意到有一些关于 Windows 8.1 中引入的 UDP 多播问题的描述;但这种情况似乎与问题描述不符。
三种情况下java环境都是1.7.0.51b13。
我需要在 Windows 8.1 中调整一些隐藏小部件以启用多播 UDP 吗?是否有一个明显的代码问题我没有发现是特定于 Windows 8.1 的?
【问题讨论】:
-
好的 - 解决了。关于发布问题的一些事情让我想到了它。问题是由于安装了虚拟机,传出代码需要知道要使用哪个接口。所以通过添加“socket.setInterface(InetAddress.getByName(
));”来修复代码 -
要么删除您的问题,要么作为答案更详细地解释解决方案。
标签: java windows udp multicast