Java socket API :Как определить, закрыто ли соединение?

У меня возникли некоторые проблемы с API сокетов Java. Я пытаюсь отобразить количество игроков, которые в данный момент подключены к моей игре. Легко определить, когда игрок подключился. Однако кажется излишне сложным определить, когда игрок отключился, используя API сокета.

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

Есть ли другое решение?

82
задан Nayuki 2 October 2015 в 21:53
поделиться