Mam pewne problemy z interfejsem API gniazd Java. Próbuję wyświetlić liczbę graczy aktualnie połączonych z moją grą. Łatwo jest określić, kiedy gracz się połączył. Jednak określenie, kiedy gracz rozłączył się za pomocą funkcji socket API, wydaje się niepotrzebnie trudne.
Dzwonienie isConnected()
do gniazda, które zostało odłączone zdalnie, zawsze wydaje się powracać true
. Podobnie, wywołanie isClosed()
gniazda, które zostało zdalnie zamknięte, zawsze wydaje się powracać false
. Przeczytałem, że aby faktycznie określić, czy gniazdo zostało zamknięte, czy nie, dane muszą zostać zapisane w strumieniu wyjściowym i wychwycony wyjątek. Wydaje się, że to naprawdę nieczysty sposób radzenia sobie z tą sytuacją. Musielibyśmy po prostu stale spamować wiadomością śmieciową w sieci, aby kiedykolwiek wiedzieć, kiedy gniazdo zostało zamknięte.
Czy jest jakieś inne rozwiązanie?