Korrekter Weg zum Schließen eines Sockets und von ObjectOutputStream?

8

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?

    
Ben Page 17.03.2009, 12:59
quelle

4 Antworten

9

Sie müssen Ihrem Listener (egal ob Client oder Server, es spielt keine Rolle) irgendeine Art von Signal senden, um nicht mehr auf weitere Daten zu warten. Hier ist ein sehr einfaches Beispiel:

%Vor%     
Jason Day 17.03.2009, 13:46
quelle
2

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).

    
Avi 17.03.2009 13:37
quelle
0

ObjectInputStream.readObject() wird EOFException ausgeben, wenn der Peer das Senden von Objekten beendet und die Verbindung geschlossen hat. Sie müssen es ignorieren.

    
EJP 26.02.2016 03:47
quelle
-1

Sie können ein Protokoll von Ihnen über das TCP / IP-Protokoll implementieren. Der Header-Teil der Pakete, die dieses Protokoll verwenden, wird unterschiedliche Arten von Paketen wie Verbindungspakete, Datenpakete, Nahverbindungspakete usw. bezeichnen     

sspkiet 28.01.2013 09:32
quelle