我在一台计算机上运行多线程服务器套接字,运行方式如下:
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.net.ConnectException。
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)
有什么想法吗?
答案 0 :(得分:1)
看起来问题不在于代码本身。
有很多可能的原因,包括
客户端,服务器,虚拟机管理程序堆栈或网络上的防火墙阻止访问。
您在客户端
您在客户端上使用了错误的服务器端口号(不是在这种情况下)
您正在使用未从客户端路由到服务器的IP地址。例如,如果服务器的IP是私有地址,并且客户端位于不同的网络上。
有人在客户端或服务器上错误配置了数据包转发(例如iptables)或路由(例如路由等)。或者其他地方。
如果我是你,我会看一台计算机是否可以PING另一台,反之亦然。如果失败,则检查路由表。请注意,这很可能是网络配置问题,而不是编程问题。
答案 1 :(得分:0)
您有错误的IP,端口未转发,或两者都有。还要确保先运行服务器。