我不知道发生了什么。代码执行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)
答案 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]