# den Server aus seinem accept-Zustand holen



## micbur (10. Jun 2004)

Hallo, 

ich habe ein kleines Problem, dem ich nicht Herr werde. 
Ich habe einen Server, der bei jedem Client, der sich meldet, einen neuen Thread startet und danach wieder in der Zeile ServerSocket.accept() landet. 

Nun, es ist eine Aufgabe eines Kurses, alles andere habe ich fertig, will ich nur vorher gesagt haben. 

Und in dieser Aufgabe steht, dass sich der Server beenden soll, wenn kein Clients mehr da ist. Also irgendwann kommen ganz viele Clients, der Server erzeugt ganz viele Threads und wenn die Clients sich abgemeldet (& beendet) haben, dann beenden sich die Threads. Und jetzt, so die Aufgabe, soll sich der Server beenden. 

Mein Problem: Ich weiß nicht wie viele Clients kommen, sonst wäre es ja einfach. Und der Server geht in einer while-Schleife immer in den accept-Zustand. Mir fällt aber nicht ein, wie ich den Server aus diesem Zustand holen könnte, denn jede Verbindungsaufnahme lässt den Server einen Thread erzeugen. 

Ich wollte schon die Threads von dem Server in einen Vector hinzufügen lassen und wenn der Vector leer ist, dann soll der Server sich beenden. Nur leider kann der Server diese Bedingung ja nicht abfragen, weil er in diesem blöden accept-Zustand ist. 


Hat jemand eine geniale Idee? 
Das wäre toll. 


Ciao micbur


----------



## Guest (10. Jun 2004)

Tu den ServerSocket auch in einen Thread, und  beende dann einfach diesen...


----------



## micbur (10. Jun 2004)

Das, glaube ich, funktioniert so nicht, denn wenn ich den ServerSocket beende, dann sind alle anderen nebenläufigen Threads auch Nase. Ich habe es zwar noch nicht ausprobiert, aber wahrscheinlich wird kein neuer Client mehr angenommen, wenn der erste Client sich abgemeldet hat. 

Der Server soll ich sich aber beenden, nachdem der letzte Client sich abgemeldet hat. 


Trotzdem danke. 

Ciao micbur


----------



## micbur (10. Jun 2004)

OK,  ich brauche keine Hilfe mehr. 

Ich habe jetzt ein kleines Identifikationsprotokoll festgelegt. Bevor der Server den Client an den Thread weiterreicht wird die erste Zeile mit Server-Signals ausgewertet. Wenn ein Client jetzt in der ersten Zeile ein Server-Signal mitschickt, dann löst das eine besondere Aktion beim Server aus, zum Beispiel dass er sich selbst beendet. 

Ich habe das aber so gemacht, dass der Server nach seinem Start ein kleines Monitoring-Programm startet, dass eine bestimmte Bedingung vom Server in bestimmten Intervallen prüft, fällt eine besondere Eigenschaft auf, dann gibt sich der Monitor als Client aus und sendet ein Server-Signal. Der Server beendet sich dann. 

Ziemlich viel Code für so eine kleine blöde Eigenschaft. Ich hätte die Aufgabe anders gestellt. Naja, egal ich habe es ja geschafft. 


Ciao micbur


----------

