我遇到了从Windows 8.1获取UDP多播发送功能的问题。
以下简单测试程序可在同一主机上运行Windows 7或Ubuntu 13的接口桥接VM中运行。出于这个原因,我确信问题不在于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特定的?
答案 0 :(得分:0)
解决方案是Windows 8.1可以访问多个接口,以太网适配器和多个VM桥接适配器。
与其他win8.1开发计划署问题的解决方案类似,似乎与其他操作系统不同,没有为UDP发送选择默认接口,因此成功的组播依赖于明确地为套接字分配接口。
Socket.setinetrface.getbyname(“以太网适配器的IP地址”)
一旦我这样做,就会按预期工作。