Я пишу сокет-клиент, который отправляет строку через сокет-соединение, а затем ждет до 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 (), я предполагаю, что буферизованный читатель вызывает это где-то в стеке, но предположение является матерью всех ошибок, поэтому я просто хотел проверить.