Я пытаюсь выяснить, подключена ли сейчас Java-Socket Socket, следующее просто говорит мне, был ли сокет подключен в какой-то момент, а не в настоящее время он все еще подключен.
socket.isConnected();
Любая благодарность, спасибо.
Я пытаюсь выяснить, подключена ли сейчас Java-Socket Socket, следующее просто говорит мне, был ли сокет подключен в какой-то момент, а не в настоящее время он все еще подключен.
socket.isConnected();
Любая благодарность, спасибо.
socket.isConnected()
возвращает всегда true, как только клиент подключится (и даже после отключения) странно!!socket.getInputStream().read()
returns -1
, если клиент отключенsocket.getInetAddress().isReachable(int timeout)
: От isReachable (int timeout)
Проверьте, доступен ли этот адрес. Наилучшие усилия прилагаются для реализации, чтобы попытаться добраться до хоста, но брандмауэры и конфигурация сервера могут блокировать запросы, приводящие к недостижимому статусу, в то время как некоторые определенные порты могут быть доступны. Типичная реализация будет использовать ICMP ECHO REQUESTs, если эта привилегия может быть получена, в противном случае она попытается установить TCP-соединение на порте 7 (Echo) хоста назначения.
Предполагая, что у вас есть некоторый уровень контроля над протоколом, я большой поклонник отправки пульса, чтобы проверить, что соединение активно. Он оказался самым отказоустойчивым методом и часто дает вам самое быстрое уведомление, когда соединение было сломано.
TCP keepalives будет работать, но что, если удаленный хост внезапно отключится? TCP может занять много времени. С другой стороны, если у вас есть логика в вашем приложении, которая ожидает, что биение будет отвечать каждые x секунд, в первый раз, когда вы их не получите, вы знаете, что соединение больше не работает, либо по сети, либо по серверной проблеме на удаленной стороне.
См. Нужно ли мне биться, чтобы открыть TCP-соединение? для более подробного обсуждения.