Client-Server Anwendung (N:1 Beziehung) - Streams Ordnungsgemäß schließen

Hi,

Ich schreibe gerade an einer Client-Server Anwendung, bei der es einen Server und einen bis N Clients gibt.
Der Server erstellt für jede angenommene Client-Verbindung einen seperaten Thread, in welchem dann die ganzen Input/Output-Aufgaben für diesen jeweiligen Client erledigt werden. Dabei sind allerdings die ganze Zeit über IO-Streams auf beiden Seiten nonstop offen (um eben auf bestimmte Codes vom Server bzw. Client zu warten und dann entsprechend agieren zu können).

Wenn sich nun irgendwann ein Client beendet, wie schließe ich dann Ordnungsgemäß alle Streams, die zwischen diesem einen Client und dem Server bestehen, damit ich keine hässligen Stream-Exceptions bekomme?
Soll ich vom Client aus, sobald dieser sein Programm beendet, noch irgendeine Nachricht zum Server (bzw. dem jeweiligen zuständigen Thread) senden wie z.B. “Schließe nun alle Streams” und dort dann nach Empfang dieser Nachricht alle IO-Streams schließen? Auch das Socket-Objekt auf dem Server (bzw. dem jeweiligen Thread) schließen? Anschließend dann auch noch auf der Clientseite alles schließen?

Was ist da die übliche Vorgehensweise für?

Und wenn ich eine normale verbindung zwischen einem Client und Server habe (Beide Seiten haben ein Socket-Objekt) und diese Verbindung schließen will, muss man da auf beiden Seiten socket.close(); verwenden oder nur auf einer Seite?

Bei Netzwerken muss man immer davon ausgehen, dass die Verbindung nicht stabil ist.

Eine Nachricht das nun alles Beendet wird ist gut, aber man darf sich nicht darauf verlassen, dass diese tatsächlich kommt.

Sockets sollte man immer auf beiden Seiten schließen.