Java应该自动检测IPv4 / IPv6吗?

时间:2016-04-04 22:44:35

标签: java ipv6 ipv4

我有一个内置的PHP HTTP服务器作为

启动
php -S localhost:8080

显然使用IPv6进行收听:

tcp6   0   0  ::1:8080    :::*    LISTEN      2642/php

使用java.net.HttpURLConnection我尝试连接到它。但是我得到了例外java.net.ConnectException: Connection refused

我做System.setProperty("java.net.preferIPv6Addresses", "true");当然一切正常。不过,这对我来说似乎是个黑客。 Java实现应该使用默认设置。

问题:为什么Java没有检测到正确的Internet协议?这是一个错误还是我的操作系统(Linux)配置错误?

1 个答案:

答案 0 :(得分:1)

Java(至少Oracle或OpenJDK到Java 8)无法正确实现地址选择。我把它带回net-dev mailinglist一段时间了,但没有多少牵引力。

默认模式是首选双栈/ IPv6地址系列,但最好是连接到IPv4地址。这是您可以使用preferIPv6Addresses=true影响的内容。根据{{​​3}},这是出于兼容性原因的决定。

在您的情况下,您可以连接到“:: 1”IPv6文本或添加一个now localhost6别名(因为它也适用于没有ipv4地址的地址条目)。

特别是对于“localhost”,无论如何都有许多配置错误的系统。