java. net .Socket определяет время ожидания клиента? - PullRequest
0 голосов
/ 15 февраля 2020

Я использую Scala с java. net .Socket и java. net .ServerSocket .

Я хочу определить, когда соединение сокета с клиентом отключено / истекло время ожидания.

Я реализовал свое собственное обнаружение, как это, которое работает:

var break = false
var startTime = System.currentTimeMillis()
while(!break){
  if(inputstream.ready()){
    //...parse input
    startTime = System.currentTimeMillis()
  }else if(System.currentTimeMillis() - startTime >= 5000){
    break = true
  }
}
socket.close()

Поэтому моя реализация закрывает сокет, когда сообщение не было получено от клиента в течение 5000 мс.

Но мне интересно, есть ли в библиотеке что-то, что я могу использовать вместо этого для определения тайм-аута.

Если клиент выключает свою программу или его соединение Inte rnet завершается и т. Д. c, есть ли что-то на сетевом уровне, транспортном уровне или иным образом, что каким-то образом мой сервер может узнать немедленно через библиотека (java. net .Socket)?

Выдается ли исключение немедленно или есть какая-то функция обнаружения тайм-аута?

1 Ответ

1 голос
/ 15 февраля 2020

Вы можете попробовать socket.setSOTimeout(5000). В этом случае будет выдано исключение java .io.InterruptedIOException, если чтение входного потока займет более 5 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...