[英]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.