Java ServerSocket不会接受新的连接,直到在接受的套接字上调用close为止

问题描述

|| 在我的代码中(在下面),在线程处理现有连接并在serverSocket.accept()创建的套接字上调用close()之前,serverSocket将不接受新连接。如果我启动此服务器并在浏览器中打开两个选项卡,则只有一个选项卡连接,而另一个则等待,直到另一个选项卡完成(不是),然后serverSocket.accept()才能接受新连接。如何在不关闭前一个连接的情况下接受新连接?
public class ReboundServer {

    static ServerSocket serverSocket;
    public static boolean listening = true;

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {     
        try {
            serverSocket = new ServerSocket(4444);

            System.out.println(\"Starting Server\");
        } catch (IOException e) {
            System.out.println(\"Could not listen on port: 4444\");
            System.exit(-1);
        }       

        while(listening)
        {
            (new Thread(new ClientThread(serverSocket.accept()))).start();
        }

        serverSocket.close();
    }
}  
public class ClientThread implements Runnable {
    private Socket clientSocket = null;

    public ClientThread(Socket socket)
    {
        this.clientSocket = socket;
    }

    public void run()
    {
        System.out.println(\"ClientConnected\");
        MatchThread.QueueLock.lock();
        MatchThread.connectionQueue.add(clientSocket);
        MatchThread.QueueLock.unlock(); 

    }
}
    

解决方法

        显然问题不在这里,而是在您尚未发布其代码的MatchThread类中。看来您有一个处理该队列的线程。为什么?     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...