Я сталкиваюсь с некоторыми проблемами с API-интерфейсом Java. Я пытаюсь показать количество игроков, которые в настоящее время подключены к моей игре. Легко определить, когда игрок подключился. Однако, кажется, излишне сложно определить, когда игрок отключился, используя API сокета.
Вызов isConnected()
в сокет, который был удален удаленно, всегда возвращает true
. Точно так же вызов isClosed()
в сокет, который был удален удаленно, всегда возвращает false
. Я прочитал, что для фактического определения того, был ли сокет закрыт, данные должны быть записаны в выходной поток, и исключение должно быть уловлено. Это похоже на действительно нечистый способ справиться с этой ситуацией. Нам просто приходилось спамить сообщение о мусоре по сети, чтобы знать, когда сокет закрылся.
Есть ли другое решение?