3 回答
TA貢獻1793條經驗 獲得超6個贊
我肯定會在兩臺機器上安裝 Wireshark,并比較所有場景。
具體來說:
https://superuser.com/questions/720851/connection-refused-vs-no-route-to-host
“連接被拒絕”表示目標機器主動拒絕連接......可能是以下情況之一:
端口上沒有任何東西在監聽
防火墻阻止了與 REJECT 的連接
ICMP 消息“no route to host”表示 ARP 無法找到目標主機的第 2 層地址。通常,這意味著具有該 IP 地址的主機未在線或未響應。
當然,這引出了一個問題,為什么 Python 以一種方式運行,而 Java 以不同的方式運行……在同一臺機器上。
再一次 - 我鼓勵你看看 Wireshark。特別是看 1) 三向 TCP 握手,以及 2) 在它之前的 ARP 調用。
PS:正如麥芽上面所說:
0.0.0.0 ...地址根本不可路由。
在 Windows 上,您可能會收到WSAEADDRNOTAVAIL - 遠程地址不是有效地址
這就引出了一個問題,為什么你會得到“ConnectionRefused”。
再說一次 - 我很好奇 Wireshark 向你展示了什么。
TA貢獻1860條經驗 獲得超8個贊
我內聯了您提供的代碼并在 Windows 10 系統上運行它,我得到了正確的異常
import java.net.InetSocketAddress;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws Exception {
new Socket().connect(new InetSocketAddress("0.0.0.0", 37845), 10_0000);
}
}
甲骨文 JDK 8.0.202
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:204)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at Main.main(Main.java:8)
Process finished with exit code 1
添加回答
舉報
