私のコードは次のようになります。これはサーバー コードです ( 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
-method コードを評価すると、EOFException
がスローされますtry-catch-body
。しかし、彼はクライアントの受け入れをやめます。