簡體   English   中英

為什么拒絕連接到localhost?

[英]Why connection to localhost is refused?

我有一台服務器,客戶端計算機連接到該服務器。 最近,我決定用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 netstat -avn | grep 8045提供:

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

偵聽套接字綁定到IPv6環回地址(:: 1)。 我回想起一些Java問題,它們不正確地支持雙棧IPv4 / IPv6系統。 這可能是這種情況。 它僅連接到127.0.0.1(IPv4)。

您嘗試過的所有其他操作(curl,telnet ...)都將首先嘗試IPv6地址,然后在失敗的情況下使用IPv4地址。 這就是為什么它們起作用,而Java應用程序卻不能起作用的原因。

嘗試強制將tunnel綁定到127.0.0.1。 您也可以嘗試將Java連接到http://[::1]:8045/malibu/GetProviders ,盡管我不記得它是否支持HTTP URL中的IPv6地址。

我在Windows上具有Apache,並且Java拒絕了連接。 但是調試連接和Apache日志顯示,這實際上不是連接問題 Apache返回錯誤301,已永久移動。 然后,它提供了指向不存在的端口8080的重定向URL。因此服務器配置有問題,可能是ServerName指令使用了錯誤的端口。 在請求的網址后面添加斜杠可解決此問題。 在我的情況下,最有用的調試輸出是由wget提供的。

接受的答案可能無法解釋這種現象。 記者本人在評論中承認,他最終在結尾處使用了帶斜杠的網址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM