我正在查看服务器的代码,该服务器创建一个线程来处理每个传入连接。问题是由于某种原因,在一堆线程上,从套接字创建的DataInputStream挂在readByte上而不会抛出任何异常。超时设置为60秒,所以我不确定下一步是什么。
socket.setSoTimeout(timeout);
socketInputStream = socket.getInputStream();
byte connectionOptions = socketDataInputStream.readByte();
答案 0 :(得分:2)
您在评论中表示您正在等待SocketException
。如果是这样,您需要抓住SocketTimeoutException
。例如,如果您telnet到端口3434并等待3秒,此代码将输出timeout!
:
try {
ServerSocket ss = new ServerSocket(3434);
Socket socket = ss.accept();
socket.setSoTimeout(3000);
InputStream socketInputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(socketInputStream);
dataInputStream.readByte();
} catch (SocketTimeoutException e) {
System.out.println("timeout!");
}
答案 1 :(得分:0)
检查完整的线程转储是否存在死锁
Windows ctrl + break
Linux的ctrl + |
或kill -3 PID
。
或使用jvisualvm
或jconsole
工具。
timeout
值应以毫秒为单位。