複数のクライアントを同時に処理するスレッドソケットサーバーを実行しようとしています。しかし、私がサーバーにtelnetして非優雅な方法で終了した後は、ウィンドウを閉じてください。ソケットサーバーをクラッシュさせずに例外を処理しますか?
サーバーがクラッシュし、e
がjava.Lang.NullPointerException
であるSystem.out.println("Runnable terminating with exception: " + e);
を返します。
私の質問は、ソケットを閉じて何かが間違っていても他の人が接続できるようにするにはどうすればいいですか?
私は例外的に新しいので、私の理解はまだ基本的です。
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