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
添加回答
举报
