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