serversocket JAVA无限服务器socket无原因停止
我编写了一个多线程服务器socket,使用无限循环来接受客户端连接。 每个客户端连接都将由一个线程处理
现在的问题是,在没有任何连接的情况下等待大约2个小时后,程序会无缘无故地停止(没有例外)
超时设置为无限:设置超时(0); 以下是服务器socket代码段:
try {
while(true) {
socket = server.accept();
BufferedReader ois = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter oos = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
SocketHandler socketH = new SocketHandler(socket, ois, oos, this);
Thread socketT = new Thread(socketH);
socketT.start();
}
} catch (Exception e) {
Debugger.log(e.getClass().toString() + ": " + e.getMessage());
}
我真的很困惑,任何帮助都将不胜感激,谢谢
# 1 楼答案
我觉得这简直难以置信。我认为更可能的情况是,存在一些不正确的异常处理,而不是某种JVM故障
catch
all中看到输出行吗李>需要意识到的一点是,当您在服务器循环中执行以下操作时,如果客户端连接并立即关闭套接字,他们可能会在那里抛出
IOException
我建议在客户端线程中执行所有这些。只需将
socket
传递到SocketHandler
构造函数中:然后在
socketT
的run()
方法中启动IO另一件事是不要做一个超时为0的
server.accept()
,而是将它设置为一分钟或其他时间(60000
),捕捉SocketTimeoutException
,然后循环。从长远来看,这不是正确的做法,但它可能会转移问题,更好地暴露问题最后,你的捕获
Throwable
在你的外部捕获。就错误处理而言,这是一件很糟糕的事情,但在你弄明白之前,你已经得到了豁免。:-)