gpt4 book ai didi

java - 处理异常而不导致套接字服务器崩溃?

转载 作者:行者123 更新时间:2023-12-02 08:26:21 25 4
gpt4 key购买 nike

我正在尝试运行一个同时处理多个客户端的线程套接字服务器。但是,当我远程登录到服务器然后以非优雅的方式退出(例如关闭窗口)时。

服务器崩溃并返回 System.out.println("Runnable termination with exception: "+ e ); 其中 ejava.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());
}
}
}

最佳答案

使用 Executor 创建线程池,并将线程执行委托(delegate)给该池。即使一个线程抛出异常,其他线程仍然处于 Activity 状态。您可以将“unhandledExceptionHandler”添加到Executor,您可以在其中记录每个异常。

第一Executor usage example来自谷歌

关于java - 处理异常而不导致套接字服务器崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com