Ich schreibe eine vernetzte Anwendung in Java, um zwischen dem Client und dem Server zu kommunizieren. Ich verwende serialisierte Objekte, um Daten / Befehle darzustellen und sie durch Objekt-Ausgabe / Eingabe-Ströme zu senden.
Ich habe Probleme, die Verbindungen sauber zu schließen, ich nehme an, dass ich etwas Grundlegendes vermisse, von dem ich nicht wirklich weiß, ich habe noch nie zuvor Sockets mit Serialisierung benutzt.
Was auch immer Reihenfolge Ich versuche, die Verbindung zu beenden (Client zuerst schließen, Server zuerst schließen) eine ConnectionReset
Ausnahme wird ausgelöst. Ich kann diese Ausnahme nicht abfangen, da der Client in einem anderen Thread läuft und der Rest des Programms ständig auf Nachrichten wartet, dies muss geschehen, da in Java socket.read()
eine Blockiermethode ist.
Wie schließe ich einen Sockel, den ich zum Senden von Objekten verwende, richtig?
Sie sollten wahrscheinlich nicht auf das Lesen () eines Sockets warten, während das andere Ende es schließt. In einem guten Netzwerkprotokoll kann der Client dem Server mitteilen, dass er vor dem Schließen der Verbindung nichts mehr zu schreiben hat (möglicherweise durch Senden eines speziellen Schließzeichens).
Tags und Links java sockets serialization networking