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