Java无法连接到服务器socket
我有一个多线程服务器socket,在1台计算机上运行,如下所示:
static void createServer() throws IOException {
//use this ip for other user
System.out.println(InetAddress.getLocalHost());
// establish server socket
try {
ServerSocket s = new ServerSocket(8888);
while (true) {
Socket incoming = s.accept();
Runnable r = new ThreadedEchoHandler(incoming, map);
Thread t = new Thread(r);
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
然后,我尝试从另一台计算机连接到服务器(使用第一台计算机192.168.162.1的ip),如下所示:
public void registerCmnd(Scanner keys) throws IOException {
InetAddress ip = InetAddress.getByName("first computer ip");
try (Socket s = new Socket(ip, 8888)) {
.....
.....
}
}
我得到一个java。网连接异常
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at User.registerCmnd(User.java:45)
at User.main(User.java:28)
有什么想法吗
# 1 楼答案
看起来问题不在代码本身
造成这种情况的原因有很多,包括
客户端、服务器、虚拟机监控程序堆栈或网络上的防火墙正在阻止访问
您为客户端上的服务器使用了错误的IP地址
您在客户端上使用了错误的服务器端口号(本例中不是这样)
您使用的IP地址不是从客户端路由到服务器的。例如,如果服务器的IP是专用地址,而客户端位于不同的网络上
有人错误配置了客户端或服务器上的数据包转发(如iptables)或路由(如routed等)。或者别的什么地方
如果我是你,我会看看一台计算机是否可以PING另一台计算机,反之亦然。如果失败,则检查路由表。请注意,这很可能是网络配置问题,而不是编程问题
# 2 楼答案
您可能有错误的ip,端口未转发,或者两者都有。还要确保先运行服务器