Я пытаюсь реализовать сервер, который принимает подключения, но время ожидания, и закрывает только это конкретное соединение, если он ничего не получил от этого соединения после N миллисекунд.ServerSocket истекает время и выходит из серверной программы
Из-за возможного непонимания метода ServerSocket
setSoTimeout(int milliseconds)
, я думал, что это поведение может быть выполнено путем передачи N в setSoTimeout
.
То, что я испытываю, когда клиент делает соединение и ничего не отправляет по этому соединению в течение N секунд, сервер ловит SocketTimeoutException
, но затем полностью останавливает выполнение и завершает процесс, выполняющий серверную программу. Вот listen
метод моего сервера:
private static void listen() throws IOException {
while(true) {
try {
Socket clientSocket = serverSocket.accept();
Connection connexion = new Connection(clientSocket);
connexion.start();
} catch (SocketTimeoutException e) {
System.out.println("Socket timed out!");
break;
}
}
}
Я успешно поймать SocketTimeoutException
, игнорировать это и предположить, что соединение с клиентом, который вызвал исключение закрывается (плохо я знаю!). Затем я просто выхожу из блока catch, чтобы продолжить прием других клиентских подключений. Что мне здесь не хватает?
Есть ли способ установить тайм-аут на клиентском «Socket»? Есть ли метод класса «Socket», который позволил бы мне достичь желаемой функциональности? – cbrad
Да, err, 'setSoTimeout()', тот же, который вы вызывали в 'ServerSocket'. Вы даже смотрели? – EJP
Плохо, я, должно быть, пропустил метод 'SetSoTimeout'' Socket'; Я думал, что он доступен только для 'ServerSocket'. Еще раз спасибо за ваш информативный ответ @EJP – cbrad