# Abbruch einer Verbindung erkennen?



## AMiGA (21. Dez 2005)

Hallo,

ich habe folgendes Problem: ein Server soll beliebig viele eingehende Verbindungen akzeptieren und auf diese dann etwas ausgeben. Wenn ein Client keine Daten mehr empfangen will und sich beendet soll der Server dies automatisch erkennen, ohne dass eine Kommunikation Client -> Server notwendig ist. Das klappt aber leider nicht. Ich dachte, dass das socket dann ungültig wird oder ähnliches und ich durch eine IOException auf Serverseite mitbekommen würde, dass der Client nicht mehr vorhanden ist.

Realisiert habe ich es folgendermaßen:

Client:


```
socket = new Socket(InetAddress.getByName(host), port);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while(isRunning)
{
    if((line = in.readLine()) != null)
    {
        // tu was
    }
}

// exit system:
in.close();
in = null;
socket.close();
socket = null;
```


...und den Server:


```
try
{
    out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
    out.println(msg);

    if(out.checkError())
    {
        // client ist nicht mehr da
    }

}
catch(IOException exc)
{
    // client ist nicht mehr da
}
```


----------



## Lim_Dul (22. Dez 2005)

Eine IOExceptions gibt es leider meines Wissens nicht, wenn sich der Client einfach beendet.
Was du machen könntest, wäre regelmässig einen "PING" Befehl an der Client zu senden. Der Client darf den dann einfach ignorieren. Sollte der Client nicht mehr da sein, dann gibt es eine IOException


----------



## AMiGA (22. Dez 2005)

Ich habe es jetzt so gelöst, dass der Client sich abmeldet, d.h. vor dem Beenden kurz ein Ende-Signal sendet. Trotzdem danke!

Gruß,
AMiGA


----------



## Mag1c (29. Dez 2005)

Hi,

solltest aber trotzdem einen Timeout einbauen. Bei abgeschossenen Clients, abgestürzten Rechnern und gekappten Netzverbindungen wird sich der Client nicht abmelden können und der Server-Thread hängt in der Luft 

Gruß
Mag1c


----------

