Conexion cliente

Buenas a todos,

Tengo un problemilla y quisiera ver si alguno me podéis ayudar.
El caso es que tengo un Arduino Mega 2560 que tiene un módulo de Ethernet por el cual yo accedo al Arduino y con un programa de Visual Basic por medio de un socket establezco la conexión.

Mi problema viene con la comunicación, cuando yo tengo mi sistema corriendo y accedo a través de mi entorno de Visual no establece muy bien la conexión debido a que hay veces que me deja conectar y otras que no. Las veces que me deja conectar no me deja mandar comandos y cuando me deja mandarlos no obtengo respuesta visual en mi entorno de Visual.

Sospecho que puede ser que mi comunicación maestro - cliente no este muy bien definida y por eso se atasque. Os voy a adjuntar un fragmento correspondiente a la función donde trato el tema del cliente, y mi cuestión que espero que me podáis ayudar es: Una vez que establezco un cliente para mandar un comando sea el que sea o varios comandos, ¿cómo cierro esa comunicación?

Gracias a todos por vuestro tiempo.

int FAtiendePeticionesTCP()
{
    Serial.println("entro a funcion de atiende peticiones");
  int liRet = 0;
  char c ;  
  gsMenRecibido="";
  unsigned long llMarcaTiempo = millis();
  unsigned long llTiempoAhora = 0;
  
  EthernetClient client = server.available(); 
  Serial.println("estamos obteniendo un cliente");
  delay (2000);
  if (client)
  {
    Serial.println("cliente obtenido");
    delay (2000);
    if (client.connected()) 
    {
          while ((client.available()) ) 
          {          
            
              llTiempoAhora = millis();
              c = client.read();        
              gsMenRecibido+=c;//store the recieved chracters in a string
              if (llTiempoAhora - llMarcaTiempo >= 2000)
                 break;    // Con esto intento cerrar la comunicación con el cliente porque de lo contrario me quedo metido en el while
                               // La pregunta sería como se puede hacer esto de otra forma porque sospecho que por aquí me vengan los problemas
          }
          Serial.print("mensaje: " + gsMenRecibido);
          Serial.println();
    }
    liRet = TrataMensajeRecibidoTCP();
  }
  return liRet;
}

Hola

No veo todo el codigo , algunas partes hay que inferirlas.
te hago obsevaciones:

  1. muchos delays muy altos, esto puede que del otro lado lo tome como timeout.
    el EthernetServer espera una conexion es decir la acepta y te devuelve el cliente que
    se conecto del lado de la pc /( en este caso) ya estas conectado no esperes!!! el otro
    lado si esta enviando algo lo va a tomar como que nadie le responde.
    el available es un sensar que el socket tenga datos , si los tiene lee, no esperes, podriasa
    esperar sino tiene y sigue conectado pensando que esta "procesando algo" pero no dejes tantas demoras
    y postea todo el codigo asi el analisis es mas facil
    saludos
    jmdc