Tengo un objeto TcpClient que envía algunos datos al servidor, utilizando su NetworkStream.Write subyacente(). para el mismo, que tiene:Cuál es la forma correcta de cerrar una conexión TCP
TcpClient server = new TcpClient(serverName, 50001);
/* ... */
NetworkStream stream = server.GetStream();
Ahora, cuando se pulsa un botón, la conexión debe cerrar. ¿Cuál es la forma correcta de cerrar la conexión? Los documentos de MSDN dicen que cerrar el TcpClient (con .Close()) de hecho no cierra el socket, solo los recursos de TcpClient (esa es al menos la forma en que entendí los documentos).
Entonces, ¿el siguiente código sería correcto al cerrar la conexión?
stream.Close();
server.Close();
¿Es esto lo suficiente, o debería primer cheque (de alguna manera) si la corriente (o servidor) se pueden cerrar (en caso de que la conexión está entreabierta o algo así) ...
Aún más , NetworkStream.Close()
MSDN docs indica que libera recursos (incluso sockets), por lo que tal vez sea suficiente cerrar el flujo, teniendo en cuenta que evito usar el TcpClient después de ese punto.
¿Cuál es el enfoque correcto?
supongo yo confiaba IntelliSense demasiado. La ventana emergente de TcpClient.Close() indica esto: "Elimina esta instancia de System.Net.Sockets.TcpClient sin cerrar la conexión subyacente". Cosa extraña. Gracias por la respuesta. –
De hecho, eso es lo que dicen los documentos 3.0 (http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.close(VS.85).aspx) en la primera oración ... pero luego la tercera oración dice que * cierra * * Socket y NetworkStream. Los 3.5 documentos (que he vinculado anteriormente) son consistentes. Sospecho que la línea en los documentos 3.0 fue un error. – Joren