我試圖運行一個線程套接字服務器,同時處理多個客戶端。但是,當我遠程登錄到服務器,然後以非優雅的方式退出後,通過關閉窗口說。處理異常而不會崩潰套接字服務器?
服務器崩潰並返回System.out.println("Runnable terminating with exception: " + e);
與e
是java.Lang.NullPointerException
。
我的問題是我怎樣才能簡單地關閉套接字,並保持服務器運行,即使在handleSession()
出現問題,以便其他人可以連接?
我是新來的異常,所以我的理解仍然是基本的。
publc class ThreadedHandler implements Runnable {
Socket incoming;
BufferedReader in;
PrintWriter out;
SortedTopicList topics;
ThreadedHandler(Socket s) {
incoming = s;
}
public void run() {
try {
handleSession(incoming);
}catch (Exception e) {
System.out.println("Runnable terminating with exception: " + e);
}
}
public void handleSession(Socket client) {
try {
//Code goes here
} catch (IOException e) {
System.err.println(e.getMessage());
} finally {
shutdown();
}
}
public void shutdown() {
try {
in.close();
out.close();
incoming.close();
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
我的主要方法如下:
public class MessageBoardServer {
public static void main(String[] args) {
Thread t;
try {
ServerSocket ss = new ServerSocket(118118);
while(true) {
Socket session = ss.accept();
t = new Thread(new ThreadedHandler(session));
t.start();
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
什麼?服務器套接字在'118118'上?有用? – khachik 2010-12-14 18:59:08
這應該是8118 :) – Ash 2010-12-14 19:09:54
你的BufferedReader和PrinteWriter初始化在哪裏?你有沒有發佈所有的代碼? – SRM 2010-12-14 19:22:01