有 Java 编程相关的问题?

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

在对接受的socket调用close()之前,Java ServerSocket不会接受新连接

在我的代码(下面)中,serverSocket将不会接受新连接,直到一个线程处理现有连接并调用该serverSocket所在socket上的close()。accept()已创建。如果启动此服务器并在浏览器中打开两个选项卡,则只有一个选项卡连接,而另一个选项卡在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(); 

    }
}

共 (1) 个答案

  1. # 1 楼答案

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