我有一个内置的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)配置错误?
答案 0 :(得分:1)
Java(至少Oracle或OpenJDK到Java 8)无法正确实现地址选择。我把它带回net-dev mailinglist一段时间了,但没有多少牵引力。
默认模式是首选双栈/ IPv6地址系列,但最好是连接到IPv4地址。这是您可以使用preferIPv6Addresses=true
影响的内容。根据{{3}},这是出于兼容性原因的决定。
在您的情况下,您可以连接到“:: 1”IPv6文本或添加一个now localhost6别名(因为它也适用于没有ipv4地址的地址条目)。
特别是对于“localhost”,无论如何都有许多配置错误的系统。