Java 在禁用/启用网络适配器上的IPv6后,Eclipse中的“仅限协议”不支持地址系列

Java 在禁用/启用网络适配器上的IPv6后,Eclipse中的“仅限协议”不支持地址系列,java,eclipse,sockets,ipv6,Java,Eclipse,Sockets,Ipv6,您好,感谢您提前提供的帮助: 我看到了这个众所周知和讨论过的问题。然而,这只是在Win7上的Eclipse、Juno中运行/调试时发生的。虚拟机版本并不重要 因此,这只是一个Eclipse问题。当我独立运行同一个应用程序时,不会发生这种情况-仅在Eclipse中运行(我已经说过了;-)) 这是在(出于测试目的)我在网络适配器上禁用IPv6,然后在这些适配器上启用IPv6之后发生的 应用程序很简单:在WS-Discovery端口上创建一个多播服务器,以侦听并向该组报告任何UDP多播。该程序在所有情

您好,感谢您提前提供的帮助:

我看到了这个众所周知和讨论过的问题。然而,这只是在Win7上的Eclipse、Juno中运行/调试时发生的。虚拟机版本并不重要

因此,这只是一个Eclipse问题。当我独立运行同一个应用程序时,不会发生这种情况-仅在Eclipse中运行(我已经说过了;-))

这是在(出于测试目的)我在网络适配器上禁用IPv6,然后在这些适配器上启用IPv6之后发生的

应用程序很简单:在WS-Discovery端口上创建一个多播服务器,以侦听并向该组报告任何UDP多播。该程序在所有情况下和平台上都能正常工作,但在机器上和Eclipse中除外,在Eclipse中,我如上所述禁用/启用了IPv6

此外: 1) 是,PreferIPV6Address=true,PreferIPv4Stack=false -在代码中设置参数 2) 不,Win7主机文件没有弄乱 3) 不,这不是Android应用程序

下面是错误代码

再次感谢,提前

汤姆

不支持协议系列
java.net.SocketException:不支持协议系列
位于java.net.PlainDatagramSocketImpl.bind(本机方法)
位于java.net.DatagramSocket.bind(DatagramSocket.java:368)
位于java.net.MulticastSocket(MulticastSocket.java:147)
setProperty(“java.net.preferIPv4Stack”、“false”);
setProperty(“java.net.preferipv6address”,“true”);
//绑定到所有IPv6端口(与IPv4绑定的“0.0.0.0”相反)
InetAddress ia6BindTo=InetAddress.getByName(“:”);
SocketAddress sa=新的InetSocketAddress(ia6BindTo,3702);
//砰
MulticastSocket ms=新的MulticastSocket(sa);
//自从禁用/启用网络适配器上的IPv6以来,已不再有这么大的进展
InetAddress m_GroupAddress=InetAddress.getByName(“[FF02::C]”);
joinGroup女士(m_GroupAddress);
这不是“为什么”的答案

这是解决办法的答案

我从Eclipse中删除了已安装的JVM并重新安装了它。行为被清除

我不能完全接受这一点,原因有二:

1) 当我再次禁用/启用IPv6时,问题会重复出现。因此,必须重复该解决方法。 2) 我必须配置项目并进一步运行配置,以使所需的JVM再次成为默认JVM


如果我发现Eclipse中出现这种情况的原因,我将发布我的发现。

您能检查一下您使用的JVM版本是否与单独运行应用程序时使用的版本相同吗?好问题,谢谢。是的,我检查并确保我的.bat文件指向我在Eclipse中使用的已安装JVM。
Protocol family not supported
java.net.SocketException: Protocol family not supported
    at java.net.PlainDatagramSocketImpl.bind(Native Method)
    at java.net.DatagramSocket.bind(DatagramSocket.java:368)
    at java.net.MulticastSocket.<init>(MulticastSocket.java:147)


System.setProperty("java.net.preferIPv4Stack", "false");
System.setProperty("java.net.preferIPv6Addresses", "true");

// bind to all IPv6 ports (in contrast to "0.0.0.0" for IPv4 binding)
InetAddress ia6BindTo = InetAddress.getByName("::");
SocketAddress sa = new InetSocketAddress(ia6BindTo, 3702);

// bam
MulticastSocket ms = new MulticastSocket(sa);

// no longer gets this far since disable/enable IPv6 on net adapters
InetAddress m_GroupAddress = InetAddress.getByName("[FF02::C]");
ms.joinGroup(m_GroupAddress);