Java ServerSocket не будет принимать новые соединения до тех пор, пока close () не будет вызвана на принятом сокете - PullRequest
0 голосов
/ 22 июня 2011

В моем коде (ниже) serverSocket не будет принимать новое соединение, пока поток не обработает существующее соединение и не вызовет close () в сокете, который создал serverSocket.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 Ответ

0 голосов
/ 22 июня 2011

Очевидно, что проблема не здесь, а в классе MatchThread, код которого вы не опубликовали. Похоже, у вас есть один поток, имеющий дело с этой очередью. Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...