Was ist die richtige Methode zum schließen einer TCP-Verbindung
Habe ich ein TcpClient-Objekt sendet einige Daten an den server, mit der Ihr zugrunde liegende NetworkStream.Write().
Dafür habe ich:
TcpClient server = new TcpClient(serverName, 50001);
/* ... */
NetworkStream stream = server.GetStream();
Nun, wenn eine Taste gedrückt wird, sollte die Verbindung schließen.
Was ist der richtige Weg, um die Verbindung zu schließen? Die MSDN docs sagen, dass die Schließung der TcpClient (mit .Close()) tut nicht in der Tat in der Nähe der Buchse, nur die TcpClient-Ressourcen (das ist zumindest die Art und Weise Verstand ich die docs).
So, würde dabei den nächsten code korrekt schließen der Verbindung?
stream.Close();
server.Close();
Ist das genug, oder sollte ich zuerst überprüfen (irgendwie), wenn der Strom (oder server) kann geschlossen werden (falls die Verbindung halb offen oder so)...
Sogar mehr, NetworkStream.Close()
MSDN docs besagt, dass es releases Ressourcen (auch Steckdosen), so dass vielleicht schließen des Streams wäre genug genommen, dass ich verhindern, mit der TcpClient nach diesem Punkt.
Was ist der richtige Ansatz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als die docs sagen:
So
server.Close();
genug sein.Schließen der NetworkStream erste wird nie verletzt obwohl.
Durch die Art und Weise, wenn Sie geschehen, werden mit dem TcpClient nur in einer Methode, wickeln Sie es in ein
using( )
- Anweisung, so dass Sie sicher sind, dassDispose()
(entsprichtClose()
) aufgerufen wird, auch wenn Ausnahmen geworfen werden, etc.Werde ich assoziiere eine TCP-Verbindung mit einem socket.
In der Regel, die Prozedur ist wie folgt:
1. Beenden Sie das senden von Daten
2. Call-Buchse.Herunterfahren mit SocketShutdown.Senden parameter
3. Schleife Erhalten werden, bis es wieder 0 oder schlägt mit einer Ausnahme fehl
4. Rufen Sie Close()
Hier ist eine kleine Probe in pseudo-code ist sehr ähnlich zu C# 🙂
Wenn die ersten und Dritten Schritte übersprungen werden - Datenverlust passieren kann.
Entnommen So schließen Sie die TCP-socket
Du hast Recht, in der Schließung der stream dann den server. Dies sollte dazu führen, dass alle sockets geschlossen wird erfolgreich über die Zeit, wie in der Dokumentation dargelegt. Jedoch, einige Kopf kratzen bugs haben mich gelehrt, die wichtige Lektion über die Zeit:
Nicht vergessen zu Spülen!
Häufig werden Sie verlieren Daten, die Sie dachte, Sie geschickt haben könnte anders. Das hilft auch sicherzustellen, dass der stream leer sein sollten, und inaktiv, wenn Sie es schließen.