Java服务器未连接

Java服务器未连接,java,Java,给定以下Java代码: public Server() throws IOException { socket = new ServerSocket(2000); System.out.println("Opening server at port: " + socket.getLocalPort()); System.out.println("IP: " + socket.getInetAddress()); tab = new SpookerTab();

给定以下Java代码:

public Server() throws IOException {
    socket = new ServerSocket(2000);
    System.out.println("Opening server at port: " + socket.getLocalPort());
    System.out.println("IP: " + socket.getInetAddress());
    tab = new SpookerTab();
    thread = new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                try {
                    System.out.println("Waiting for a client...");
                    Socket client = socket.accept();
                    System.out.println(client.getInetAddress().getHostAddress() + " has connected.");
                    Thread thread = new Thread(new SpookerClient(client));
                    threads.put(client, thread);
                    thread.start();
                    System.out.println("Client found!");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    });

    thread.start();
}
它从不通过socket.accept()

为什么会这样

Java Server java.net.ConnectException: Connection timed out: connect
它从不通过socket.accept()

为什么会这样

Java Server java.net.ConnectException: Connection timed out: connect
但这就是服务器的工作方式

Socket client = socket.accept();
将阻止等待客户端连接的线程

javadoc声明:

侦听与此套接字的连接并接受它。这个 方法阻塞,直到建立连接

将创建一个新的套接字,如果有安全管理器,则 使用调用安全管理器的checkAccept方法 s、 getInetAddress().getHostAddress()和s.getPort()作为其参数 确保操作是允许的。这可能会导致 安全例外


如果没有客户端连接到服务器,则执行将停止。

我假设您有另一个进程尝试连接到它?您需要另一个线程/进程连接到它,以便accept()返回。连接超时表明防火墙阻止了此端口。服务器从不连接-它正在等待传入连接。因此,正如Joe C已经指出的那样,您需要一个连接到TCP端口2000(您的服务器)的客户端;但是我们没有那个客户端的代码。最有可能的是,有一个防火墙挡住了去路,但如果没有客户端代码,我们无法判断。