有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)

有什么想法吗


共 (2) 个答案

  1. # 1 楼答案

    看起来问题不在代码本身

    造成这种情况的原因有很多,包括

    • 客户端、服务器、虚拟机监控程序堆栈或网络上的防火墙正在阻止访问

    • 您为客户端上的服务器使用了错误的IP地址

    • 您在客户端上使用了错误的服务器端口号(本例中不是这样)

    • 您使用的IP地址不是从客户端路由到服务器的。例如,如果服务器的IP是专用地址,而客户端位于不同的网络上

    • 有人错误配置了客户端或服务器上的数据包转发(如iptables)或路由(如routed等)。或者别的什么地方


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

  2. # 2 楼答案

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