Java无法连接到服务器套接字

时间:2016-04-25 04:03:29

标签: java sockets networking

我在一台计算机上运行多线程服务器套接字,运行方式如下:

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)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看起来问题不在于代码本身。

有很多可能的原因,包括

  • 客户端,服务器,虚拟机管理程序堆栈或网络上的防火墙阻止访问。

  • 您在客户端

  • 上使用了错误的IP地址
  • 您在客户端上使用了错误的服务器端口号(不是在这种情况下)

  • 您正在使用未从客户端路由到服务器的IP地址。例如,如果服务器的IP是私有地址,并且客户端位于不同的网络上。

  • 有人在客户端或服务器上错误配置了数据包转发(例如iptables)或路由(例如路由等)。或者其他地方。

如果我是你,我会看一台计算机是否可以PING另一台,反之亦然。如果失败,则检查路由表。请注意,这很可能是网络配置问题,而不是编程问题。

答案 1 :(得分:0)

您有错误的IP,端口未转发,或两者都有。还要确保先运行服务器。