C # - Um einen NetworkStream zu schließen, rufen Sie stream.Close oder socket.Shutdown auf?

9

Ich habe mich gefragt, ob jemand den besten Weg kannte, eine Klasse zu disponieren, die ein Socket-Objekt und ein NetworkStream-Objekt verwendet? Die fragliche Klasse verfügt über eine Instanz von NetworkStream und eine Instanz von Socket, mit der der NetworkStream erstellt wird.

%Vor%

In meiner Dispose-Methode sollte ich das tun?

%Vor%

Ist das alles notwendig oder ist es übertrieben?

    
Nick Ramirez 18.02.2011, 22:38
quelle

3 Antworten

2

Socket verfügt nicht über die zugehörige NetworkStream . Ich feuerte Reflektor auch sicher. (ein Werkzeug, um .NET dlls und .NET-Bibliotheken zu analysieren. Tolles Tool. Sie müssen Ende des Monats die kostenlose Version herunterladen, bevor sie vollständig ausgeführt wird.).

Nach beiden der MDSN-Dokumentation und dem Reflector wird der Stream den Socket aber schließen nur wenn es den Besitz des Sockels besitzt. Sie können dies als zweiten Parameter im überladenen Konstruktor festlegen.

Sie müssen Shutdown in jedem Fall aufrufen, wenn gelöscht wird die Daten . Wenn Sie dies nicht tun, könnten Sie Daten verlieren.

    
Sem Vanmeenen 18.02.2011, 23:06
quelle
1

Sowohl Socket als auch Stream Implementieren IDisposable , so dass Sie einfach .Dispose() für jedes Objekt aufrufen können. Die Dispose-Methode sollte das Schließen und andere für die Entsorgung erforderliche Aktionen verarbeiten.

%Vor%

Dies ist zum Beispiel die disassemblierte Methode Dispose aus der Stream-Klasse:

%Vor%     
Kyle Trauberman 18.02.2011 22:46
quelle
1

Rufen Sie gemäß der Dokumentation in MSDN stream.Close () auf "Schließt den aktuellen Stream und gibt alle Ressourcen (wie Sockets und Dateihandles) frei, die dem aktuellen Stream zugeordnet sind.", was mir sagt, dass stream.Close () entsorgt auch den Socket. Sie müssten jedoch immer noch socket.Shutdown () aufrufen.

Wie auch immer, IMHO ist der sicherste Weg die Verwendung von "using", es hält Sie auf der sicheren Seite:)

%Vor%     
KBoek 18.02.2011 22:55
quelle

Tags und Links