为什么我只在某些Windows 7系统上需要java.net.preferIPv4Stack = true?

时间:2013-07-15 06:59:59

标签: java networking windows-7

我在Windows 7(64位)计算机上使用Java已经有一段时间了,并且从未遇到过无法创建网络连接的问题。现在在我工作的公司的系统上,我需要设置“-Djava.net.preferIPv4Stack = true”,或者似乎java进程无法创建单个连接。

缺点是,如果我没有设置“_JAVA_OPTIONS”,我将不得不配置大量服务来使用此设置。但是,如果我使用它,Java将这个愚蠢的“拾起:_JAVA_OPTIONS ......”输出到stderr(不知道哪个人做出了那个愚蠢的决定)。然而,这使得我的GWT编译在IntelliJ中失败。

我想知道的......这是我第一次遇到这些问题,我猜他们必须以某种方式与操作系统的设置相关。可能导致这些问题的原因(正如我所提到的......我有大约4个其他具有Windows 7和64位java vms的系统没有这些问题。)

克里斯

3 个答案:

答案 0 :(得分:5)

好的,我们找到了原因。

这个问题似乎发生在包含我们公司使用的特殊版本远程访问软件的系统上。这似乎已经将一些修改后的dll插入到Windows网络堆栈中(我们被告知为了自动检测网络连接)。看起来这个DLL有一些问题,导致所有IPv6流量被阻止。它还使受影响的机器定期使用Bluescreens。卸载该软件使系统Bluescreen免费,我不再需要preferIPv4Stack设置。

答案 1 :(得分:2)

这只是一个理论......

根据Java文档,如果操作系统上有IPv6,则底层本机套接字将是IPv6套接字。

如果操作系统没有IPv6,或者它已正确配置IPv6,那就是您想要的。但是如果操作系统的IPv6运行不正常,那么我想Java会尝试使用IPv6来建立连接并失败。


  

但是,如果我使用它,Java会将这个愚蠢的“Picked up:_JAVA_OPTIONS ...”输出到stderr。

根据此Q& A,无法将其关闭:Suppressing the "Picked up _JAVA_OPTIONS" message

我建议全局设置_JAVA_OPTIONS(如果必须),然后根据启动IDE的环境取消设置。

答案 2 :(得分:0)

只是我的贡献:

禁用网络设备上的所有 ipv6 为我解决了这个问题。

我希望这会有所帮助