我有一个线程可以打开一个将数据发送到服务器的套接字。服务器可以根据某人是否在工作站发回数据。但是,我试图在BufferedReader
上设置超时,以便在30秒后继续说响应为空。
//Receive Response
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
response = new StringBuilder();
while ((line = bufferedReader.readLine()) != null ) {
response.append(line);
}
这是我的BufferedReader
,非常标准,我查看过一堆定时器和其他帖子,但还没有找到合适的解决方案。
答案 0 :(得分:2)
您可以在套接字实例上调用setSoTimeout()
。
当达到超时时,它会引发SocketTimeoutException
。将您的读取逻辑包装在try-catch块中,捕获该异常并按照您的意愿处理它。
这样的事情:
try {
socket.setSoTimeout(30000);
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((line = bufferedReader.readLine()) != null ) {
response.append(line);
}
} catch (SocketTimeoutException ste) {
// timeout reached
} catch (Exception e) {
// something else happened
} finally {
// some general processing
}