Mam obiekt TcpClient, który przesyła niektóre dane do serwera, używając jego podstawowej metody NetworkStream.Write(). Nich, mam:Jaki jest poprawny sposób zamknięcia połączenia TCP?
TcpClient server = new TcpClient(serverName, 50001);
/* ... */
NetworkStream stream = server.GetStream();
Teraz, gdy przycisk jest wciśnięty, połączenie powinno zamknąć. Jaki jest właściwy sposób zamknięcia połączenia? Dokumenty MSDN mówią, że zamknięcie TcpClient (z .Close()) w rzeczywistości nie zamyka gniazda, tylko zasoby TcpClient (to przynajmniej sposób, w jaki rozumiałem dokumenty).
Czy zatem wykonanie następnego kodu poprawnie zamknęłoby połączenie?
stream.Close();
server.Close();
Czy to wystarczy, czy powinienem najpierw sprawdzić (jakoś), jeżeli strumień (lub serwer) może być zamknięty (w przypadku, gdy połączenie jest półotwarty lub coś) ...
Nawet więcej , NetworkStream.Close()
Dokumenty MSDN stwierdza, że zwalnia zasoby (nawet gniazda), więc może zamknięcie strumienia byłoby wystarczające, biorąc pod uwagę, że uniemożliwiam korzystanie z TcpClient po tym punkcie.
Jakie jest właściwe podejście?
Chyba zaufany IntelliSense zbyt dużo. Wyskakujące okienko dla TcpClient.Close() stwierdza: "Zrzuca instancję System.Net.Sockets.TcpClient bez zamykania podstawowego połączenia." Dziwna rzecz. Dzięki za odpowiedź. –
Tak właśnie mówią dokumenty 3.0 (http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.close(VS.85).aspx) w pierwszym zdaniu ... ale potem trzecie zdanie mówi, że * to * zamyka Socket i NetworkStream. Dokumenty 3.5 (które wcześniej łączyłem) są spójne. Podejrzewam, że wiersz w dokumentach 3.0 był błędem. – Joren