2011-08-28 14 views
6

İstemcinin bağlandığı bir sunucum var. Son zamanlarda, bağlantıyı stunnel ile şifrelemeye karar verdim, şimdi istemci programı doğrudan sunucuya değil, localhost'a bağlanıyor: 8045 (kontrol ettim ve bu bağlantı noktası dolu değil).Neden localhost'a bağlantı reddediliyor?

Java kodu:

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

Ve şu olsun:

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

Ben curl kullanarak aynı sayfayı istemek için çalışırsanız, her şey yolunda.

Bu tür davranışlara neden olan nedir?

DÜZENLEME: Evet, bir dinleme soket var - netstat -avn | grep 8045 çalıştıran verir:

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

URL() –

+2

@Dave'de https: // 'yi denediniz mi ?: (1) Bu nasıl çalışır. (2) Hata, uygulama düzeyinde bir anlaşma hatası değil, açıkça TCP düzeyinde bir bağlantı reddi. – cdhowie

+0

IP adresinizi URL’de kullanmayı deneyin. – nIKUNJ

cevap

11

dinleme soket IPv6 geri döngü adresine bağlı (:: 1). Java ile çift yığınlı IPv4/IPv6 sistemlerini doğru şekilde desteklemeyen bazı sorunları hatırlıyorum; Bu muhtemelen böyle bir durumdur. Sadece 127.0.0.1'e bağlanıyor (IPv4).

Denediğiniz diğer her şey (curl, telnet ...) önce IPv6 adresini deneyecek ve ardından başarısız olursa IPv4 adresine geri dönecektir. Bu yüzden Java uygulamasında çalışmazlar.

127.0.0.1'e bağlamak için stunnel'i zorlamayı deneyin. HTTP URL'lerinde IPv6 adreslerini destekleyip desteklemediğini hatırlayamasam da Java'yı http://[::1]:8045/malibu/GetProviders'a bağlamayı deneyebilirsiniz.

+1

Evet! İşe yaradı! Stunnel.conf dosyasındaki "accept" satırını 127.0.0.1:8045 olarak değiştirdim ve "http: //127.0.0.1:8045/malibu/ ", ve her şey yolunda görünüyor. – Rogach

+4

Nasıl çalıştığını öğrenmek için kodu değiştirdin .. ayrıca yardıma ihtiyacım var –

1

Windows'ta Apache ve ayrıca Java'dan reddedilen bağlantı var. Ancak bağlantı ve Apache günlüğünün hata ayıklaması, aslında bağlantı sorunu olmadığını bildiriyor. Apache 301 hatasını döndürür, kalıcı olarak taşınır. Daha sonra, var olmayan 8080 numaralı bağlantı noktasına bir yönlendirme url'si sağlar. Sunucu yapılandırmasında bir sorun olduğu için, muhtemelen SunucuAdı yönergesi yanlış bağlantı noktası kullanır. İstenilen URL'ye numaralı bir eğik çizgi eklenmesi sorunu giderir. Benim durumumdaki en yararlı hata ayıklama çıktısı wget tarafından verildi.

the accepted answer bu durumu açıklamıyor olabilir. Muhabir kendisi bir nihayet sonunda sonunda bir slash ile bir url kullandığını bir yorumda itiraf etti.