亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java Socket 無法使用 NoRouteToHostException 而不是

Java Socket 無法使用 NoRouteToHostException 而不是

翻過高山走不出你 2022-06-15 09:44:36
問題當使用 java 的 socket 類打開一個套接字IP: 0.0.0.0和Port: 37845(只是一個隨機關閉的端口)時,套接字連接失敗,機器 1java.net.NoRouteToHostException上有一個Exception in thread "main" java.net.NoRouteToHostException: No route to host (Host unreachable)    at java.net.PlainSocketImpl.socketConnect(Native Method)    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.SocksSocketImpl.connect(SocksSocketImpl.java:392)    at java.net.Socket.connect(Socket.java:589)    at Test.main(Test.java:26)我正在使用這個測試代碼:import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;public class Test { public static void main(String[] args) throws Exception {  Socket socket;  // create a socket with a timeout  SocketAddress socketAddress = new InetSocketAddress("0.0.0.0", 37845);  // create a socket  socket = new Socket();  // this method will block no more than timeout ms.  int timeoutInMs = 10 * 1000; // 10 seconds  socket.connect(socketAddress, timeoutInMs);  System.err.println("SUCCESS"); }}預期的什么,我實際上期待的是一個java.net.ConnectException : Connection refused (Connection refused),這也是我在另一臺 Cent OS 機器上得到的,我們稱之為Machine2:Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)        at java.net.PlainSocketImpl.socketConnect(Native Method)        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.SocksSocketImpl.connect(SocksSocketImpl.java:392)        at java.net.Socket.connect(Socket.java:589)        at Test.main(Test.java:26)
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

0.0.0.0是一個特殊地址,是特殊0.0.0.0/8范圍的一部分,表示“當前網絡”或“未指定”。您無法連接到它,因為它未定義為目的地。

這就是為什么你得到一個NoRouteToHostException- 地址根本不可路由。如果您嘗試運行ping 0.0.0.0或類似的命令,您將遇到類似的失敗。

ConnectionRefused當遠程機器實際拒絕連接時發生,這通常表明遠程機器沒有偵聽套接字或位于防火墻后面。


查看完整回答
反對 回復 2022-06-15
?
搖曳的薔薇

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 向你展示了什么。


查看完整回答
反對 回復 2022-06-15
?
桃花長相依

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


查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關注
  • 345 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號