【问题标题】:Java exception while attempting socket connection尝试套接字连接时出现 Java 异常
【发布时间】:2012-08-31 15:43:59
【问题描述】:

我正在尝试与 ip:port 建立套接字连接,并且它在我的一台计算机上都可以正常工作。客户端首先通过socket连接连接到服务器进行登录;之后,它期望来自服务器的传入连接并且它们是成功的。

但是,当我在另一台计算机上尝试时,客户端建立了第一个连接以成功登录,然后等待传入连接。在将启动连接的服务器端,我收到此消息:

java.net.NoRouteToHostException

并且传入连接失败。

为什么会这样?会不会是防火墙问题?

s = new Socket(id, 4446);
BufferedWriter out1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader in1 = new BufferedReader(new InputStreamReader(s.getInputStream()));

这是第 46 行

java.net.NoRouteToHostException: No route to host: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at sample_server.doComms.run(doComms.java:46)
        at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 添加代码没有意义,太复杂了,听起来不像是源代码问题,因为它在一个系统上成功
  • 可能是网络问题。您可以从第二台主机 ping 服务器,反之亦然吗?
  • 显示如何连接套接字的代码(不是整个代码),提供所涉及的任何主机名和/或 IP 地址以及完整的堆栈跟踪。
  • @Evan 所涉及的主机名和 IP 地址将是最有趣和最有用的部分 :)
  • @PhilippReichart 我无法公开该 phil,但我尝试从服务器 ping 并没有得到响应,所以我猜它是防火墙。

标签: java sockets


【解决方案1】:

API中所述:

表示尝试将套接字连接到远程地址和端口时发生错误。通常,由于中间有防火墙,或者中间路由器出现故障,无法访问远程主机。

您很可能有防火墙或其他东西阻止了连接。如果你有一个真的很快,请尝试禁用一个,看看它是如何工作的。如果它不起作用,那就是别的东西(完整的堆栈跟踪可能会有所帮助,因为您的问题上的 cmets 说)。

【讨论】:

  • 我问他是否有防火墙,他说没有,我猜你可能是对的。谢谢
  • @Evan 好吧,您将不得不使用 TeamViewer 或其他东西为他寻找他的防火墙:P 另外,如果这是正确的,+1/正确答案(似乎是)
【解决方案2】:

“没有到主机的路由”意味着您的主机甚至不知道如何联系目标。这是网络连接问题。不是防火墙问题。

【讨论】:

  • 不确定,但我相信防火墙和代理可能会阻止拨出电话,从而造成网络连接问题。
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
相关资源
最近更新 更多