Problem mit destroy-Methode

Hallo,

ich habe eine Applet implementiert, die mit einem Server über Socket kommuniziert.

Ich möchte den Server mitteilen, wenn der User den Explorer schliesst, deshalb habe ich in destroy-Methode Info zum Server gesendet:

public void destroy() {
String str;
noStopRequested = false;
if(!server_stat && !user_Activation) //server is started from GUI
{
buf[0] = ‚3‘;
System.out.println(„server is started from GUI“ );
}
else
{
buf[0] = ‚5‘;
System.out.println(„server is started from machine“ );
}

do // wait until send_prozess equals false
{
}
while(send_prozess);

out.write(buf, 0, 1); // send data
out.flush();
stopRecDataThread();
stopServerThread();
} //public void destroy()

Aber das Problem ist so: manchmal der Server bekommt nicht diese info „3 oder 5“ wenn ich den Explorer schnell schliesse.

Wie kann ich das Problem Lösen?

Gruss.
Hicham

Moien

…pre-tags sind was tolles…

Ich möchte den Server mitteilen, wenn der User den Explorer
schliesst,

Und der Server kann nicht einfach überprüfen ob der Socket noch offen ist ?

deshalb habe ich in destroy-Methode Info zum Server
gesendet:

destroy ist eine no-seatbelds-methode. Niemand kann dir garantieren dass z.B. das Socket-Object zu dem Zeitpunkt noch exisitiert. Oder dein buf-array. Wenn du aus destroy herraus noch was machen willst dann erzeugt die Objekte alle selbst neu. Ich empfehle ein UDP-Packet zu schicken und sich auf Server-Siete nicht drauf zu verlassen.

cu

Hi,

wie wäre es mit einer anderen Methode. Du könntest zum Beispiel das XmlHttpRequest Objekt nehmen und mit diesem beim onClose Event im Browser eine Nachricht an den Server schicken.

Gruss,

Herb

was du machen kannst regelmässig vom Server einen Ping Befehl an Client zu senden. wenn der Client nicht mehr lebt. gibt es eine IOException.
Wenn der Client zb abstürtzt kann er sich beim Server nicht abmelden.deswegen ist es sicherer wenn der Server selbst prüft ob der Client noch da ist oder nicht

Youssef