Hola a todos, buen día.

Tengo una aplicación desarrollada con c# framework 2.0. Esta aplicación
consiste en un socket que recibe envia y recibe mensajes, cadenas de texto
de alrededor de 100 caracteres. El intercambio de mensajes es intensivo la
mayor parte del día. Alrededor de 90 - 100 por minuto y en horas pico hay
lapsos de hasta 160 - 170 por minuto.
Mi aplicación se encarga de enviar los mensajes conforme van llegando, uno
tras otro, y la recepción de mensajes la tengo implementada en un thread que
llama a una función que recibe mensajes y es de la siguiente forma:

   void recibirmensaje()
   {
      while(conectado)   //variable booleana que se asigna a true cuando
hago la conexion del socket
      {
         if(socket.available > 0)
         {
             datosrecibidos = socket.receive(buffer);
             respuestaServidor = Encoding.ASCII.GetString(buffer, 0,
datosRecibidos);
             //la cadena recibida la proceso en otro thread
             cMensajeRecibido oMjs = new cMensajeRecibido(respuestaServidor,
CadenaCn, tiempoEspera, appPath, SegundosTimeOut);
             new Thread(new ThreadStart(oMjs.ProcesarRespuesta)).Start();

         }
      }
   }

Pero tengo dos problemas:
    El primero es que a veces la respuesta no la recibo completa. En lugar
de los 100 caracteres recibo la mitad. Lo primero que se me ocurre es que
    del otro lado no me esten mandando la cadena completa pero ¿es posible
que sea mi función la que no está haciendo bien la lectura? ¿por que
    solo ocurre cuando hay muchos envios y respuestas seguidos?
    Si del otro lado siempre me mandan las respuestas completas ¿Hay alguna
manera de asegurar que mi aplicación reciba todas las respuestas completas?

    El segundo es que a veces hago el envío y la respuesta no la recibo, o
no la alcanzo a recibir. Esto ocurre cuando hago muchas peticiones
    seguidas, por ejemplo en el mismo segundo. En este caso mis dudas son
similares al primer punto, y asumiendo de entrada que del otro lado sí me
    estan respondiendo todas.

Es decir ¿Hay alguna manera de optimizar el uso del socket para que reciba
la mayor cantidad de respuestas que le lleguen?

¡Gracias!

Responder a