Как отловить сокет-тайм-аут в Java - PullRequest
0 голосов
/ 26 сентября 2019

Я пишу сервер с Java.net.Теперь я хочу изменить некоторые переменные по истечении времени ожидания сокета.

Я не могу найти интерфейс 'onTimeout' или что-то подобное.

Сейчас я ищу решение этой проблемы.

1 Ответ

0 голосов
/ 26 сентября 2019

Вы говорите, что используете java.net, поэтому я предполагаю, что вы используете что-то вроде java.net.ServerSocket.Если вы вызовете setSoTimeout в вашем экземпляре ServerSocket, вы сможете установить таймаут для вашего сокета.Затем, когда вы блокируете во время звонков на принять , ваш ServerSocket будет отслеживать время ожидания.Как видно из документации, accept выдает SocketTimeoutException, если время ожидания определено и время ожидания превысило время ожидания.Итак, у вас получится что-то вроде этого (извините за то, что я немного заржавел на Socket с):

try(ServerSocket ssock = new ServerSocket(...))
{
    ssock.setSoTimeout(10_000); // 10 second timeout
    while(true)
    {
        Socket csock = ssock.accept();
        methodToStartThreadThatHandlesClientSocket(csock);
    }
}
catch(SocketTimeoutException ste)
{
    //handle socket timeout
}
catch(Exception other)
{
    //handle other exceptions
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...