DataInputStream readByte被阻塞/挂起

时间:2011-03-17 09:38:36

标签: java sockets

我正在查看服务器的代码,该服务器创建一个线程来处理每个传入连接。问题是由于某种原因,在一堆线程上,从套接字创建的DataInputStream挂在readByte上而不会抛出任何异常。超时设置为60秒,所以我不确定下一步是什么。

socket.setSoTimeout(timeout);
socketInputStream = socket.getInputStream();
byte connectionOptions = socketDataInputStream.readByte();

2 个答案:

答案 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

或使用jvisualvmjconsole工具。

timeout值应以毫秒为单位。