我有一个线程可以打开一个将数据发送到服务器的套接字。服务器可能会根据是否有人在工作站发回数据。但是,我试图在 BufferedReader
上设置超时,以便在 30 秒后它继续说响应为空。
//Receive Response
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
response = new StringBuilder();
while ((line = bufferedReader.readLine()) != null ) {
response.append(line);
}
这是我的 BufferedReader
,非常标准,我查看了一堆计时器和其他帖子,但没有找到可行的解决方案。
最佳答案
您可以调用 setSoTimeout()
在您的套接字实例上。
Itt 将在达到超时时引发 SocketTimeoutException
。将您的读取逻辑包装在一个 try-catch block 中,捕获该异常并按您的意愿进行处理。
像这样:
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
}
关于java - 如何在 Android 中经过一定时间后停止 BufferedReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49379108/