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:
...und den Server:
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
}