2011-08-28 176 views
6

Tengo un servidor al que se conecta una máquina cliente. Recientemente decidí encriptar la conexión con stunnel, por lo que ahora el programa de cliente no se conecta directamente al servidor, sino a localhost: 8045 (comprobé, y este puerto no está ocupado).¿Por qué se rechaza la conexión a localhost?

código Java:

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

y me sale el siguiente:

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) 
    . . . 

Si trato de solicitar la misma página utilizando curl, todo está bien.

¿Qué puede causar tal comportamiento?

EDIT: Sí, hay un socket de escucha - corriendo netstat -avn | grep 8045 da:

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

Ha intentado https: // en la URL() –

+2

@Dave: (1) No es así como funciona stunnel. (2) El error es claramente un rechazo de conexión de nivel TCP, no un error de negociación a nivel de aplicación. – cdhowie

+0

Intenta usar tu IP en la URL. – nIKUNJ

Respuesta

11

El socket de escucha está obligado a la dirección de bucle invertido de IPv6 (:: 1). Recuerdo algunos problemas con Java que no admite sistemas de doble pila IPv4/IPv6 correctamente; este es probablemente un caso así. Se está conectando a 127.0.0.1 solamente (IPv4).

Todo lo demás que ha intentado (rizo, telnet ...) tratará la dirección IPv6 en primer lugar, y luego caer de nuevo en la dirección IPv4 si eso no funciona. Es por eso que funcionan, mientras que la aplicación Java no.

Intenta forzar stunnel para que se una a 127.0.0.1. También puede intentar que Java se conecte a http://[::1]:8045/malibu/GetProviders, aunque no recuerdo si es compatible con las direcciones IPv6 en las URL HTTP.

+1

Sí Se trabajó he cambiado "aceptar" línea en stunnel.conf a 127.0.0.1:8045 y URL para "http.:.! //127.0.0.1:8045/malibu/ ", y todo parece estar bien. – Rogach

+4

cómo cambiaste el código para que funcione ... también necesito ayuda –

1

Tengo Apache en Windows y también se ha rechazado la conexión de Java. Sin embargo, la depuración de la conexión y el registro de Apache muestra que en realidad es no es un problema de conexión. Apache devuelve el error 301, movido permanentemente. A continuación, proporciona una URL de redirección al puerto 8080 que no existe. Por lo tanto, hay un problema con la configuración del servidor, probablemente la directiva ServerName utiliza un puerto incorrecto. Agregar una barra diagonal a la url solicitada soluciona el problema. La salida de depuración más útil en mi caso fue dada por wget.

Es posible que the accepted answer no explica el fenómeno. El reportero mismo admitió en un comentario que finalmente usó una url con barra al final.

Cuestiones relacionadas