PROBLEMAS AL LEER DE UN SOCKET!!!!
Hola a tod@s....
Tengo un ligero problemilla con un buufer, la cuestion es que leo de un socket multicast una trama recibida y la guardo en buffer, hasta aqui todo bien.
El tema es que si recibo una trama grande de 400 bytes, y despues una trama pequeña de 250 bytes, cuando lo guardo en el buffer y lo imprimo por pantalla me muestra la trama pequeña completa y la restante de la anterior desde la posicion 250 hasta la 400.
Juraría que no es problema de buffer ya que lo limpio cada vez que recibo una trama con :
strcpy (buffer, "");
buffer [0] = ' '
etc
pero no me hace caso.
Creo que el problema esta en que cuando recibo una trama de 400 todo lo que recibo posteriormente es de 400, aunque sea una trama de 250 recibire 400, aunque yo no quiera. Tambien le pongo un al final del buffer cuando recibo la trama y nada.
buffer[TAMAÑO_TRAMA] = ' '
me sigue mostrando 400!!!!
Si no les he perdido espero que sepan como solucionarlo
GRACIAS
Y SALUDOS
strcpy(buffer,"") y buffer[0]=0 lo unico que hacen es poner un 0 en la primera posicion del buffer, el resto del buffer lo dejan igual.
buffer[TAMAÑO_TRAMA]=0 se sale del buffer. Deberia ser buffer[TAMAÑO_TRAMA-1]=0, pero eso solo pone un 0 en la ultima posicion, dejando todo lo demas intacto.
Si quieres borrar realmente el buffer, usa la funcion memset() , que rellena todo el buffer con el byte que tu le digas. Si no tienes esa funcion, haz un bucle desde 0 hasta TAMAÑO_TRAMA y pon ceros en todas las posiciones.
De todas formas, si tu buffer es de texto (parece que si es asi), basta con poner un 0 justo dentras del ultimo mensaje recibido.
Cuando recibas el mensaje de 250, pon un 0 en la posicion 251. No se borra el buffer, pero cuando intentes escribirlo en pantalla, solo escribira los primeros 250 caracteres.
Se bueno.
buffer[TAMAÑO_TRAMA]=0 se sale del buffer. Deberia ser buffer[TAMAÑO_TRAMA-1]=0, pero eso solo pone un 0 en la ultima posicion, dejando todo lo demas intacto.
Si quieres borrar realmente el buffer, usa la funcion memset() , que rellena todo el buffer con el byte que tu le digas. Si no tienes esa funcion, haz un bucle desde 0 hasta TAMAÑO_TRAMA y pon ceros en todas las posiciones.
De todas formas, si tu buffer es de texto (parece que si es asi), basta con poner un 0 justo dentras del ultimo mensaje recibido.
Cuando recibas el mensaje de 250, pon un 0 en la posicion 251. No se borra el buffer, pero cuando intentes escribirlo en pantalla, solo escribira los primeros 250 caracteres.
Se bueno.
