Неполадка в многопоточном сервере с использованием службы executor - PullRequest
0 голосов
/ 02 ноября 2018

Я пытался создать многопоточный сервер, используя службу executor, при этом каждое соединение обслуживалось новым потоком. Проблема, которую я заметил в следующем коде, заключается в том, что при удалении режима добавления из PrintWriter все перестает работать, и между клиентом и сервером не происходит никакой связи. Но если я добавлю true для режима добавления вещи начинают работать.

public class KnockKnockServer {

private ServerSocket server;

private ExecutorService threadPool;

public KnockKnockServer() {
    try {
        server = new ServerSocket(4444);
    } catch (IOException e) {
        e.printStackTrace();
    }
    threadPool = Executors.newCachedThreadPool();
}

public void processClients() {

    try {
        while(true) {
            Socket acceptedConn = server.accept();

            //Here if i remove true no communication

            PrintWriter out = new PrintWriter(acceptedConn.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(acceptedConn.getInputStream()));
            threadPool.execute(() -> {
                try {
                    KnockKnockProtocol protocol = new KnockKnockProtocol();
                    String outputLine, inputLine;

                    outputLine = protocol.processInput(null);
                    out.println(outputLine);

                    while((inputLine = in.readLine()) != null) {
                        outputLine = protocol.processInput(inputLine);
                        out.println(outputLine);
                        if(outputLine.equals("Bye."))
                            break;
                    }
                } catch(Exception e) {
                    e.printStackTrace();
                }
            });
        }
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        try {
            server.close();
        } catch(IOException ex) {
            ex.printStackTrace();
        }
    }

}

}

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