Jak wykryć że zerwało połączenie

0

Witam,

W jaki sposób wykryć że zerwano połączenie między klientem z serwerem.
załóżmy że rozłączył się kabel albo zabrakło zasilania na kompie gdzie był serwer.

Jesli w kliencie mam taka funkcję i ją wykonam przed podłączeniem

    boolean isConnected()
    {
        return (mySock.isConnected());
    }

to pokazuje że nie ma połączenia
ale jeśli nawiąże połączenie, sprawdzam - pokazuje że jest połączenie a gdy serwer ulegnie zamknięciu to pokazuje nadal ta funkcja że jest połączenie.

Co z tym zrobić?
Pozdrawiam

0

Za pomocą timeoutu. Jeżeli na połączeniu nie ma aktywności przez zadany czas, to je po prostu zamknij.
Z drugiej strony serwer powinien w ładny sposób połączenie zamykać i wtedy isConnected() zwróciłoby false.

0

No w sumie to nie jest dobre rozwiązanie.
Bo przecież moj klient może siedzieć obok zegarka obok GG i mam zamknąć gniazdo - trochę bez sensu.

Teraz mam taką funkcję do łączenia

    void connect() //throws Exception
    {
        try
        {
            if (mySock!=null)
            {
                if (!mySock.isConnected())
                {
                    mySock.connect(new InetSocketAddress(sHost, 5000), 5000);
                }
            }
            else
            {
                mySock = new Socket(sHost, 5000);
            }
        }
        catch(java.net.UnknownHostException ex)
        {
            this.msg = "Error1" + ex.toString();
            return;
        }
        catch(IOException ex)
        {
            this.msg = "Error2" + ex.toString();
            return;
        }

       msg = "nawiazano polaczenie z hostem:" + sHost;
    }

I jesli mam połączenie oraz zamknę serwer poprzez Ctrl+Alt+Del -> zakonczenie procesu i ponownie ten proces uruchomie to aplet w żaden sposób nie zareaguje. Mało tego - ponowna próba połączenia nic nie daje - Aplet myśli że jest połączony ale tak naprawde nie jest połączony.

Jak wymusić sprawdzenie istnienia połaczenia - oczywiście wysłanie znaku i odesłanie go przez serwer to ostateczność.

Pozdrawiam

0

Jesli stracisz połączenie, to SocketInputStream.read() rzuci wyjątkiem...

0

http://mindprod.com/jgloss/socket.html

punkt Disconnet Detection

1 użytkowników online, w tym zalogowanych: 0, gości: 1