9
votes

C # - Pour fermer un réseau NetworkStream, appelle flux.frose ou socket.shutdown?

Je me demandais si quelqu'un savait la meilleure façon de disposer d'une classe qui utilise un objet de socket et un objet Networkstream? La classe en question a une instance de Networkstream et une instance de prise utilisée pour créer le réseau de réseau.

this.stream.Close();
this.socket.Shutdown(SocketShutdown.Both);
this.socket.Close();


0 commentaires

3 Réponses :


1
votes

Les deux socket code> et flux code> implémentent Idisposable code> afin que vous puissiez simplement appeler .Dispose () code> sur chaque objet. La méthode d'élimination doit gérer la fermeture et d'autres actions nécessaires à l'élimination.

public void Dispose()
{
    this.Close();
}


3 commentaires

Vous ne pouvez pas appeler Disposer sur une prise. Seuls Fermer .


La mise en œuvre de l'Idisposable de la prise est explicite, ce qui signifie qu'il n'a pas de méthode de disposition «publique», vous devrez lancer une prise sur Idisposable pour pouvoir appeler, par exemple. (((Isolable) prise) .Dispose () ...


en utilisant (var socket = nouvelle prise ()) {..} appellera le dispositif d'élimination ()



1
votes

Selon la documentation dans MSDN, appeler le flux.Close () "ferme le flux en cours et libère toutes les ressources (telles que les sockets et les poignées de fichier) associées au courant actuel.", qui me dit que flux.frose () dispose également de la prise. Vous devrez toujours appeler Socket.Shutdown ().

Quoi qu'il en soit, IMHO Le moyen le plus sûr consiste à utiliser "Utilisation", il vous permet de rester sur le site sûr :) xxx


0 commentaires

2
votes

socket ne dispose pas de l'associé NetworkStream . J'ai tiré réflecteur aussi être certain. (un outil pour analyser .NET DLLS et thet thet Bibliothèques. Great Tool. Vous devez mettre fin au mois pour télécharger la version gratuite avant qu'elle ne passe complètement.

Cependant, selon La documentation MDSN et réfléchir le flux fermera la prise mais seulement s'il possède la propriété de la prise. Vous pouvez définir cela comme deuxième paramètre dans le constructeur surchargé.

Vous devez appeler shutdown dans tout cas car si chasse les données . Si vous ne le faites pas, vous pourriez perdre des données.


1 commentaires

Je vais marquer cela comme la bonne réponse que parce que cela a le plus de documentation. Je me demande si la méthode d'élimination de la ruisseau pourrait faire le travail, mais il ne semble pas y avoir beaucoup d'informations sur ce qu'elle fera exactement.