Почему отказано в подключении к localhost? - PullRequest
6 голосов
/ 28 августа 2011

У меня есть сервер, к которому подключается клиентская машина. Недавно я решил зашифровать соединение с помощью stunnel, поэтому теперь клиентская программа подключается не напрямую к серверу, а к localhost: 8045 (я проверил, и этот порт не занят).

Java-код:

URL url = new URL("http://localhost:8045/malibu/GetProviders");
InputStream stream = url.openStream();

И я получаю следующее:

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at java.net.Socket.connect(Socket.java:469)
    at java.net.Socket.<init>(Socket.java:366)
    at java.net.Socket.<init>(Socket.java:180)
    . . .

Если я пытаюсь запросить ту же страницу, используя curl, все в порядке.

Что может вызвать такое поведение?

РЕДАКТИРОВАТЬ: Да, есть сокет прослушивания - работает netstat -avn | grep 8045 дает:

tcp6       0      0 ::1:8045                :::*                    LISTEN

Ответы [ 2 ]

13 голосов
/ 28 августа 2011

Слушающий сокет связан с адресом обратной связи IPv6 (:: 1).Я вспоминаю некоторые проблемы с Java, которые не поддерживают системы с двумя стеками IPv4 / IPv6 правильно;это, наверное, такой случай.Он подключается только к 127.0.0.1 (IPv4).

Все остальное, что вы пробовали (curl, telnet ...), сначала попробует адрес IPv6, а затем откажется от адреса IPv4 в случае сбоя.Вот почему они работают, а приложение Java - нет.

Попробуйте принудительно привязать stunnel к 127.0.0.1.Вы также можете попробовать подключить Java к http://[::1]:8045/malibu/GetProviders, хотя я не могу вспомнить, поддерживает ли он адреса IPv6 в URL-адресах HTTP.

1 голос
/ 25 ноября 2013

У меня есть Apache на Windows, а также отказано в соединении с Java. Однако отладка соединения и журнала Apache показывает, что на самом деле это , а не проблема соединения . Apache возвращает ошибку 301, навсегда перемещена. Затем он предоставляет URL-адрес перенаправления на несуществующий порт 8080. Так что что-то не так с конфигурацией сервера, возможно, директива ServerName использует неправильный порт. Добавление косой черты к запрошенному URL устраняет проблему. Наиболее полезный вывод отладки в моем случае был предоставлен wget.

Возможно, принятый ответ не объясняет явление. Сам репортер признался в комментарии, что в конце концов использовал URL с косой чертой в конце.

...