Lo ideal seria (en Cramel):
Creo que es obvio, pero por si no se entendió, intentamos conectar desde un bucle infinito, si se conectó recibimos datos hasta que estos sean equivocados o nulos, si esto ultimo sucede, salimos del segundo bucle y se intentará conectar automáticamente.
De esta manera no vas a necesitar que el cliente este enviando o verificando si el servidor sigue vivo ya que el estado es absoluto.
			Código (vb) [Seleccionar] 
Var hSock:Entero
Repetir
    hSock = TCPConectar("ip/host",666)
    Si hSock Entonces
        Repetir
            Var Datos:Cadena
            Datos = TCPRecibir(hSock,1024)
            Seleccionar Datos
                Caso "mostrar mensaje"
                    Mensaje("Se ha recibido un mensaje del cliente!")
                Caso Otro ' Si los datos son equivocados o nulos salimos del bucle.
                   TCPDesconectar(hSock) ' Cerramos por si las moscas...
                   Salir Repetir
             FinSeleccionar
        PorSiempre
    FinSi
PorSiempreCreo que es obvio, pero por si no se entendió, intentamos conectar desde un bucle infinito, si se conectó recibimos datos hasta que estos sean equivocados o nulos, si esto ultimo sucede, salimos del segundo bucle y se intentará conectar automáticamente.
De esta manera no vas a necesitar que el cliente este enviando o verificando si el servidor sigue vivo ya que el estado es absoluto.