Abbruch einer Verbindung erkennen?

Status
Nicht offen für weitere Antworten.

AMiGA

Bekanntes Mitglied
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:

Code:
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:

Code:
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
}
 
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
 
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
 
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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben