Solución:
Tienes que cerrar la transmisión antes de cerrar la conexión:
tcpClient.GetStream().Close();
tcpClient.Close();
Cerrar el cliente no cierra la corriente.
Dado que la respuesta aceptada está desactualizada y no veo nada en las otras respuestas con respecto a esto, estoy creando una nueva. En .Net 2 y versiones anteriores, tenía que cerrar manualmente la transmisión antes de cerrar la conexión. Ese error se corrigió en todas las versiones posteriores de TcpClient
en C # y como se indica en el documento del método Close, una llamada al método Close
cierra tanto la conexión como la transmisión
EDITAR según Microsoft Docs
El método Close marca la instancia como eliminada y solicita que el Socket asociado cierre la conexión TCP. Según la propiedad LingerState, la conexión TCP puede permanecer abierta durante algún tiempo después de que se llama al método Close cuando quedan datos por enviar. No se proporciona ninguna notificación cuando la conexión subyacente ha terminado de cerrarse.
Llamar a este método eventualmente resultará en el cierre del Socket asociado y también cerrará el NetworkStream asociado que se usa para enviar y recibir datos si se creó uno.
Utilice la palabra: using
. Un buen hábito de programación.
using (TcpClient tcpClient = new TcpClient())
{
//operations
tcpClient.Close();
}