sorry por la espera pero ya sabes como es esto del trabajo..

en fin, lo que se me estaba ocurriendo es que primero crees una especi de listener para hacer el check, y recuerda hacer un close de tu tcpclient para que no se quede colgado, posiblemente por ahi venga tu problema..
Mira.. te paso éste código para que te des una mejor idea de como podría ser (es solo un ejemplo "x")
Cita: Dim tcpClient As New TcpClient
tcpClient.Connect(host, port)
Dim networkStream As NetworkStream = tcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then
'hacer un simple write
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Probando, probando...")
networkStream.Write(sendBytes, 0, sendBytes.Length)
'Leer la el stream en un buffer (byte)
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
'Salida de los datos recibidos de host
Dim returndata As String = Encoding.ASCII.GetString(bytes)
MessageBox.Show(("Host returned: " + returndata))
Else
If Not networkStream.CanRead Then
MessageBox.Show("No puedo escribir datos en mi stream...")
tcpClient.Close()
Else
If Not networkStream.CanWrite Then
MessageBox.Show("No puedo leer datos de mi stream...")
tcpClient.Close()
End If
End If
End If
Espero aque te sirva de algo.
Salu2