Я пытался создать многопоточный сервер, используя службу 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();
}
}
}
}