线程“main”中的异常java.net.NoRouteToHostException:没有到主机的路由

时间:2015-12-11 06:30:55

标签: java http

我不知道发生了什么。代码执行8-16小时,然后停止执行程序。为什么?任何人都可以帮忙吗?

Exception in thread "main" java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)     
    at java.net.Socket.connect(Socket.java:579)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:133)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at example.producer.Spout6.main(Spout6.java:79)

3 个答案:

答案 0 :(得分:2)

该异常通常表示某种网络路由问题。这可能是LAN或WAN中网络配置出现问题的结果,也可能是网络链路或交换机中断的结果。它甚至可能是由于您尝试与之交谈的主机失败造成的。

IMO,它不太可能是网络防火墙问题,尽管这也是可能的。 (通常防火墙会简单地丢弃数据包以阻止流量,这很可能会导致连接超时。但是,防火墙可以使用导致此异常的Destination Unreachable数据包进行响应。)< / p>

答案 1 :(得分:1)

可能是防火墙...或类似互联网......或者太多端口......以下是详细信息:

  

表示尝试连接套接字时发生错误   远程地址和端口。通常,远程主机不能   因为介入防火墙或中间人而达到了   路由器坏了。

Java docs

此外,您可能没有可用的端口:

  

短暂的港口范围的另一个重要分支就是它   限制从一台机器到a的最大连接数   远程机器上的特定服务! TCP / IP协议使用   连接的4元组来区分连接,所以如果   短暂的端口范围只有4000个端口宽,这意味着那里   从客户端计算机到远程计算机只能有4000个唯一的连接   一次服务。   (http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html

执行此操作以获取要检查的可用端口:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

注意:

代码肯定不是问题,而是通过更改防火墙设置或获得更强的连接来尝试保持良好的连接。另外,按照我上面告诉你的方式检查可用的端口。

答案 2 :(得分:1)

这可能是防火墙的问题

如果您使用的是Linux,请按照以下步骤操作:

停止防火墙:&gt; service iptables stop

允许您要在主机上连接的端口:&gt; ufw允许[port_number]