我正在开发一个涉及服务器和客户端的程序,我尝试监听一个端口,然后从客户端向该端口发送消息。然而,这样做我得到NoRouteToHostException
。我制作了一个简单的客户端和服务器应用程序来测试我是否可以为给定的服务器和客户端发送和接收消息。
Server:
public class Server{
public static void main(String [] args) throws Exception{
ServerSocket s = new ServerSocket(8001);
s.accept();
}
}
Client:
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 服务器,也成功了。另外,如果我在本地主机上运行客户端,我不会收到异常。仅当客户端在不同的系统上运行时,我才会收到异常。
EDIT当在 8080 上运行服务器时,它可以工作。我尝试通过以下方式允许所有传入连接到服务器iptables --policy INPUT ACCEPT
,但这仍然不允许我监听端口 8001
仅当由于中间有防火墙而无法访问端口时,才会发生这种情况。该防火墙可以位于任何地方,甚至可以位于客户端或服务器计算机上。
ping
是检查主机是否可访问(但不是在端口 8001 上)。ping
,确认主机可访问。
尝试在另一个通常开放的端口(例如 80、443、8080 等)上运行服务器程序。网络/防火墙管理员通常允许这些端口开放并可访问。请注意,对于端口 80、443(任何小于 1024 的端口)将需要 root 访问权限才能绑定到它(在服务器上)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)