Мой код выглядит следующим образом, это код сервера (Runnable
)
public void run() {
while (true) {
try {
System.out.println("Waiting for client...");
this.socket = serverSocket.accept();
System.out.println("Client accepted");
while (true) {
readCommand();
try {
Thread.sleep(2);
} catch (Exception e) {
}
}
} catch (Exception ex) {
Main.error("Server stopped for current host", ex);
}
}
}
Моя проблема: когда клиент закрывает соединение, он все еще ожидает чтения команды в readCommand();
до тех пор, пока команда не будет отправлена и не будет выдано EOFException
. Это мой readCommand
метод:
private void readCommand() throws Exception {
Object o = new ObjectInputStream(socket.getInputStream()).readObject();
if (o instanceof Command) {
((Command) o).execute();
return;
}
if (o instanceof Recorder) {
System.out.println("Recording received");
((Recorder) o).executeRecord();
return;
}
if (o instanceof MyKeyEvent) {
((MyKeyEvent) o).execute();
return;
}
}
Так что я думаю, что перед прочтением нужно проверить, открыто ли соединение.
Редактировать: Если я оцениваю код run
-метода, EOFException
добавляется в try-catch-body
. Но он перестает принимать клиентов.