2016-04-04 3 views
3

Я встроенный PHP-сервер HTTP начал какДолжна ли Java автоматически определять IPv4/IPv6?

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 не обнаружил надлежащий интернет-протокол? Это ошибка или неправильная настройка моей ОС (Linux)?

+0

Это отличный вопрос, я бы с удовольствием узнал, почему Java более точно не придерживается существующих конвенций. Кажется, что они переопределены на каждой платформе, как грубые аппроксимации http://cr.openjdk.java.net/~michaelm/7120875/webrev.3/src/macosx/classes/java/net/DefaultInterface.java.html –

+0

hmm. Странный. [Gist: Эта программа] (https://gist.github.com/kedarmhaswade/a12c8c20f86d998474bb14d0e0b533cb), похоже, отлично работает для меня на Mac (сервер использует IPv6). И указанное свойство «null». –

+0

Каковы записи DNS, связанные с этим хостом? Может быть, у него есть запись A на нефункциональный IP4-адрес? – bmargulies

ответ

1

Java (по крайней мере, Oracle или OpenJDK до Java 8) неправильно выполняет выбор адреса. Я поднял это некоторое время назад на net-dev mailinglist, но не было большой тяги.

Режим по умолчанию - предпочтительнее использовать семейство двухэкземпляров/IPv6-адресов, но предпочтительнее подключаться к IPv4-адресам. Это то, что вы можете влиять на preferIPv6Addresses=true. Согласно (old) IPV6 guide for Java, это было решение по причине совместимости.

В вашем случае вы можете подключиться к литералу «:: 1» IPv6 или добавить псевдоним localhost6 (так как он также будет работать с адресами, у которых нет адреса ipv4).

Специально для «локального хоста» много пропущенных систем там, во всяком случае.

+1

Я отправил напоминание net-dev http://mail.openjdk.java.net/pipermail/net-dev/2016-April/009680.html – eckes

 Смежные вопросы

  • Нет связанных вопросов^_^