Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Servidor HTTP

Estas en el tema de Servidor HTTP en el foro de C/C++ en Foros del Web. Hola foreros! soy relativamente novato en esto de la programación y tengo una pequeña duda, a ver si me podéis echar un cable. Tengo que ...
  #1 (permalink)  
Antiguo 04/11/2012, 10:11
 
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Servidor HTTP

Hola foreros!
soy relativamente novato en esto de la programación y tengo una pequeña duda, a ver si me podéis echar un cable. Tengo que implementar un servidor HTTP en C++, el caso es que en la función que recoge las peticiones que se le hacen, en la primera ejecución se procesa correctamente, pero a partir de ahí, no sé por qué, se introduce un caracter extraño en la primera posición de la petición.
Para que nos entendamos, la petición se recoge en la variable buffer (char*) y se concatena en la variable llegada. Es en ésta donde aparece el caracter extraño.
Código C++:
Ver original
  1. while (conexion==1)
  2.     {
  3.       llegada = new char [1024];
  4.      
  5.       do //Este do es el que permite recibir mensajes con varias líneas mediante telnet.
  6.       ///   while(1)
  7.     {
  8.       buffer = new char [1024];
  9.       n_recv = recv (len, buffer,1024, 0);
  10.  
  11.       if (n_recv == 0)
  12.         {
  13.           cout << "->\tConexión cerrada por el cliente." << endl;
  14.           close(len);
  15.           return;
  16.         }
  17.       else if (n_recv== -1)
  18.         {
  19.           close(len);
  20.           return;
  21.         }
  22.       strcat(llegada,buffer); //concatena el contenido de ambas variables. Es decir, poner a continuacion de mensaje el contenido de buf. En
  23.     }
  24.       while (strstr(llegada,"\r\n\r\n")==NULL); // \r\n\r\n indica el final de la petición HTTP
  25.      
  26.       cout << llegada << endl;
  27.  
  28. //código que procesa la petición
  29.  
  30. delete llegada;
Alguien ve algún fallo que pueda estar provocando esto.
Gracias por adelantado :D
  #2 (permalink)  
Antiguo 04/11/2012, 12:16
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Servidor HTTP

El caracter que tienes son datos basura que se quedan en la memoria reservada y no liberada; para cada recv estas reservando bloques de 1kb que al final no liberas.

Antes de llamar a recv tienes que dejar el buffer textualmente vacío (con memset o con buffer[0]='\0'); y dado el caso que estas usando un buffer de tamaño estatico, mejor declara esa variable de forma estatica una sola vez (tendras que vaciarla igualmente antes del recv)

Saludos
vosk
  #3 (permalink)  
Antiguo 06/11/2012, 17:15
 
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Servidor HTTP

Gracias vosk! me vino de perlas tu ayuda!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:48.