首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端NoRouteToHostException

问客户端NoRouteToHostException
EN

Stack Overflow用户
提问于 2014-12-01 03:31:17
回答 1查看 20.6K关注 0票数 4

我正在开发一个涉及服务器和客户端的程序,我试图监听端口,然后从客户端向该端口发送消息。然而,在这样做的时候,我得到了NoRouteToHostException。我制作了一个简单的客户机和服务器应用程序来测试我是否能够为我的给定服务器和客户端发送和接收消息。

服务器:

代码语言:javascript
复制
public class Server{
 public static void main(String [] args) throws  Exception{
   ServerSocket s = new ServerSocket(8001);
   s.accept();
 }
}

客户端:

代码语言:javascript
复制
public class Client{
  public static void main(String [] args){
    Socket s = new Socket(IP, port);
    PrintWriter p = new PrintWriter(s.getOutputStream(), true);
    p.println("Hello World");
    s.close();
  }
}

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:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        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 java.net.Socket.connect(Socket.java:538)
        at java.net.Socket.<init>(Socket.java:434)
        at java.net.Socket.<init>(Socket.java:211)

我试着打开服务器,它也通过了。另外,如果我在本地主机上运行客户机,就不会有异常。只有当客户端在不同的系统上运行时,我才会得到异常。

编辑当在8080上运行服务器时,它可以工作。我尝试通过执行iptables --policy INPUT ACCEPT允许所有传入连接到服务器,但这仍然不允许我在端口8001上侦听

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-01 03:40:19

只有当端口由于中间有防火墙而无法访问时,才会发生这种情况。这个防火墙可以在任何地方,甚至在客户机或服务器机器上。

ping检查主机是否是可访问的,而不是端口8001。从ping可以确认主机是可访问的。

尝试在另一个一般开放的端口上运行服务器程序,如80、443、8080等。网络/防火墙管理员通常允许开放和访问这些端口。注意,对于端口80,443 (任何端口小于1024)需要根访问才能绑定到它(即服务器上)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27221290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档