我正在编写一个套接字客户端,它在套接字连接中发送一行,然后等待最多45秒,以便从服务器返回一行。
我正在使用像这样的缓冲读卡器:
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
socket = new Socket(host, 800);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
} catch (UnknownHostException e) {
listener.failedToConnectToHost(e);
return;
} catch (IOException e) {
listener.failedToConnectToHost(e);
return;
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
out.println("message");
try {
String response = in.readLine();
listener.responseRecived(response);
return;
} catch (IOException e) {
listener.errorReadingResponse(e);
return;
}
如果我添加以下行(或类似的东西)
socket.setSoTimeout(45000);
假设从另一端没有任何东西通过,45秒后会发生什么?
我想我会抓住一个中断的异常,但我确定?
这甚至会起作用吗? setSOTImeOut()的文档暗示它的socket.read()将超时,我假设缓冲的读者在堆栈的某处调用它,但假设是所有搞砸的母亲,所以我只想检查。 / p>
答案 0 :(得分:3)
BufferedReader.readLine()
方法会在45秒后抛出SocketTimeoutException
。
答案 1 :(得分:0)
显然它确实有效并且你得到一个SocketTimeoutException。