客户端中的NoRouteToHostException

时间:2014-12-01 03:31:18

标签: java sockets

我正在开发涉及服务器和客户端的程序,我尝试侦听端口,然后从客户端向该端口发送消息。但是,这样做我得NoRouteToHostException。我创建了一个简单的客户端和服务器应用程序来测试我是否可以为给定的服务器和客户端发送和接收消息。

服务器:

public class Server{
 public static void main(String [] args) throws  Exception{
   ServerSocket s = new ServerSocket(8001);
   s.accept();
 }
}

客户端:

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)

我试图ping服务器,它也经历过。此外,如果我在localhost上运行客户端,我不会得到异常。当客户端在不同的系统上运行时,我才会收到异常。

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

1 个答案:

答案 0 :(得分:2)

只有当端口因为防火墙之间无法访问时才会发生这种情况。此防火墙甚至可以位于客户端或服务器计算机上 ping用于检查主机是否可访问,但在端口8001上是否可访问。从ping,确认主机可访问。

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