SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: jesusfd en Viernes 10 de Diciembre de 2004, 18:44

Título: La Función Recv ¿?
Publicado por: jesusfd en Viernes 10 de Diciembre de 2004, 18:44
Tengo un pequeño problema al recibir de un socket con la llamada recv:

lo que recibo es el buffer de la longitud que yo le pase, ej:

nbytes=recv(fd,buffer, longitud,0);

bien... pues, ¿como hago para convertir todos esos caracteres del buffer en una cadena y luego poder comparar con strcmp,...??

nota: hice un pekeño bucle while(leido<long) para leerlos,  luego hice:
 char *orden;
orden=buffer[nbytes];

if(strcmp(orden,"patron")==0)
 printf("escribio patron");

pero resulta que si pongo: patronxyz dsfds
 me dice que escribí patrón!!
como lo soluciono? ¿?
Título: Re: La Función Recv ¿?
Publicado por: © Jonathan © en Viernes 10 de Diciembre de 2004, 20:14
Si aun luchas con el problem puedo ayudarte, si es posible postea el code, lo miro y te ayudo a corregirlo. Saludos!
Título: Re: La Función Recv ¿?
Publicado por: jesusfd en Sábado 11 de Diciembre de 2004, 13:01
bien,...concretando mas en mi problema: Necesito leer una orden de un cliente, para ello uso:
 recv(fd,buffer,sizeof(buffer),0);

pues bien, como yo recibo un bufer de caracteres me gustaría saber como hago para tratar la orden y sus argumentos:
ej...
 cliente: user jesus
Todo ello se enviará por buffer (incluso mas espacios en blanco hasta completar el tamaño de este), pero yo lo kiero saber alguna forma de poder guardar los argumentos recibidos (user y jesus) para luego tratarlos mediante strcmp,....

Gracias!! :rolleyes:
Título: Re: La Función Recv ¿?
Publicado por: JuanK en Sábado 11 de Diciembre de 2004, 16:06
tienes que hacer una funcio nque te entienda el buffer como una cadena y luego buscar 'espacios' los cuales indican quie a continuacion es un argumento nuevo.

asio ue basicamente solo es hacer un programa que te separe el contenido de una cadena segun el numero de espacios que esta tenga.
Título: Re: La Función Recv ¿?
Publicado por: mgitano2001 en Miércoles 15 de Diciembre de 2004, 05:06
Si estas seguro que te llegan espacios, prodrias usar strtok(), lo que hace esta funcion es dividir una cadena en componentes lexicos o tokens mediante un separador ( que en este caso seria " " ). Cuando terminen los datos que te interesan, termina la cadena con '\0' asi sabes hasta donde son datos utiles.

veamos un ejemplo completo:

recv(fd, buffer, 512, 0);/* No sizeof(buffer), especifica un tamaño (consejo) */
cadena = strtok(buffer, " ");
while (cadena != NULL ) {
       /* Guardar esa cadena en un lugar o prosesarla */
       cadena = strtok(NULL, " ");
}

Espero que te sea de ayuda, cualquier cosa, escribi nuevamente.
Saludos Mgitano2001