我的代碼看起來是這樣的,這是服務器代碼(Runnable
)的Java:插座緊密連接和ObjectInputStream的
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
拋出。但他停止接受客戶。
程序需要'Thread.sleep(2)' – 2009-10-12 18:55:51
'End-of-connection'是一個解決方案謝謝。 – 2009-10-12 19:04:40
這很好。很高興知道它現在正在工作。 – 2009-10-12 19:14:54