Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/11/2009, 07:17
GagleKas
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años, 10 meses
Puntos: 0
De acuerdo Leer de un socket

Holas.

Estoy realizando una aplicacion cliente-servidor donde yo soy unicamente cliente y tengo la informacion necesaria para conectar con el servidor.

Imaginemos que el servidor me envia un mensaje de 10 bytes (1 caracter, 1 byte). Como se que ocupa 10 bytes es tan facil como hacer:

Código:
nBytes = read (fd_socket, buffer, 10);
Dentro del buffer se guardaran los 10 caracteres.


Ahora bien, y si la longitud del mensaje nos la indican dentro del propio mensaje? Por ejemplo, el primer byte indica la longitud del mensaje (sin contar el primer byte). Supongamos que un int ocupa 1 byte. Entonces lo que yo haria seria lo siguiente (sin controlar los errores):

Código:
int num;
nBytes = read (fd_socket, buffer, 1); //Leo primer byte
num = atoi (buffer);
nBytes = read (fd_socket, buffer, num); //Leo los demas bytes
Mi problema es que el primer read lo hace bien. Pero cuando hago el segundo se me bloquea el programa porque esta esperando mas mensajes del servidor. Es como si leyera el priemr byte y luego borrara los bytes que quedan por leer.

Tenia entendido que el read es como una cola y no se perdian los demas caracteres.


Algun comentario?


Gracias.