2011-08-28 2 views
6

클라이언트 컴퓨터가 연결되는 서버가 있습니다. 최근 stunnel과의 연결을 암호화하기로 결정 했으므로 이제 클라이언트 프로그램은 서버에 직접 연결하지 않고 localhost : 8045에 연결합니다 (이 포트는 점유되지 않았습니다).localhost에 대한 연결이 거부되는 이유는 무엇입니까?

자바 코드 :

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 
+1

URL에서 https : //를 시도한 적이 있습니까? –

+2

@Dave : 스턴넬이 작동하는 방식이 아닙니다. (2)이 오류는 명백히 응용 프로그램 수준 협상 오류가 아닌 TCP 수준 연결 거부입니다. – cdhowie

+0

URL에서 IP를 사용해보십시오. – nIKUNJ

답변

11

청취 소켓은 IPv6의 루프백 주소에 바인딩 (:: 1). 이중 스택 IPv4/IPv6 시스템을 올바르게 지원하지 않는 Java의 문제를 상기합니다. 이것은 아마도 그런 경우 일 것입니다. 127.0.0.1 (IPv4)에만 연결됩니다.

다른 모든 시도 (curl, telnet ...)는 IPv6 주소를 먼저 시도한 다음 실패 할 경우 IPv4 주소로 되돌아갑니다. 그것이 Java 응용 프로그램은 그렇지 않지만 작동하는 이유입니다.

stunnel이 127.0.0.1에 바인딩되도록하십시오. 또한 Java가 http://[::1]:8045/malibu/GetProviders에 연결되도록 시도 할 수도 있지만 HTTP URL에서 IPv6 주소를 지원하는지 여부는 알 수 없습니다.

+1

예! stunnel.conf의 "accept"행을 127.0.0.1:8045로 변경하고 "http : //127.0.0.1:8045/malibu/ "그리고 모든 것이 잘되는 것 같습니다. – Rogach

+4

어떻게 작동하도록 코드를 변경 했습니까? 도움이 필요합니다. –

1

Windows에 Apache가 있으며 Java에서 연결이 거부되었습니다. 그러나 연결 및 Apache 로그를 디버깅하는 것은 실제로는 연결 문제가 아님을 보여줍니다.. Apache는 오류 301을 반환하고 영구적으로 이동합니다. 그런 다음 존재하지 않는 포트 8080에 리디렉션 URL을 제공합니다. 서버 구성에 문제가있어 아마도 ServerName 지시문이 잘못된 포트를 사용합니다. 요청한 URL에 후행 슬래시을 추가하면 문제가 해결됩니다. 필자의 경우 가장 유용한 디버깅 출력은 wget에 의해 제공되었습니다.

the accepted answer은 현상을 설명하지 않을 수도 있습니다. 기자 자신은 마침내 그가 끝에 슬래시로 URL을 사용했다는 코멘트에 시인했다.

관련 문제