I have a TcpClient object which sends some data to server, using its underlying NetworkStream.Write(). Therefor, I have:
TcpClient server = new TcpClient(serverName, 50001);
/* ... */
NetworkStream stream = server.GetStream();
Now, when a button is pressed, the connection should close. What is the right way to close the connection? The MSDN docs say that closing the TcpClient (with .Close()) does not in fact close the socket, only the TcpClient resources (that's at least the way I understood the docs).
So, would doing the next code correctly close the connection?
stream.Close();
server.Close();
Is this enough, or should I first check (somehow) if the stream (or server) can be closed (in case the connection is half-open or something)...
Even more, NetworkStream.Close()
MSDN docs states that it releases resources (even sockets), so maybe closing the stream would be enough, taken that I prevent using the TcpClient after that point.
What is the right approach?
As the docs say:
Calling this method will eventually result in the close of the associated Socket and will also close the associated NetworkStream that is used to send and receive data if one was created.
So server.Close();
will be enough.
Closing the NetworkStream first will never hurt though.
By the way, if you happen to be using the TcpClient only in one method, wrap it in a using( )
statement so that you're sure Dispose()
(equivalent to Close()
) is called on it, even if exceptions are thrown etc.