Я пытаюсь запустить поточный сервер сокетов, который обрабатывает несколько клиентов одновременно. Однако после того, как я подключился к серверу и выйду из него не изящным способом, скажем, закрыв окно.Обработка исключений без сбоя сервера сокетов?
Сервер аварийно завершает работу и возвращает 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
Это должно быть 8118 :) – Ash
Где ваш BufferedReader и PrinteWriter инициализированы? Вы отправили весь код? – SRM