клиент - приложения.
На сервере ServerSocket слушает, когда клиент цепляется, serverSocket.accept() отдает клиентский сокет на стороне сервера, через него начинаю гонять данные. С этим проблем нет. Мне нужно определить на стороне сервера, когда клиент отвалился. Столкнулся с тем, что после отключения клиента от сервера клиентский сокет на сервере продолжает быть isBound(), isConnected() и !isClosed(). Как так-то? Или он через какое-то время закроется?
Похоже, ответ найден сразу после задания вопроса... https://stackoverflow.com/a/10241044/2798461 В TCP/IP нет возможности достоверно определить, что сокет соединён.
Так работает TCP. Если клиент не смог прислать пакет с FIN, то обнаружить, что он отвалился, можно только уровнем выше, всякими проверками статуса (ping-pong, вот это всё).
Обсуждают сегодня