Calculadora Remota mediante sockets: strtof de las narices..

Temas relacionados con la programación de aplicaciones que funcionan sobre un servidor.
Responder
Mensaje
Autor
Stoyicker
Mensajes: 3
Registrado: 10/04/2011 9:41 am

Calculadora Remota mediante sockets: strtof de las narices..

#1 Mensaje por Stoyicker » 10/04/2011 10:24 am

Buenas, me llamo Jorge y el título lo dice casi todo: tengo que implementar en C una aplicación de Calculadora Remota según el modelo cliente/servidor. El caso es que es la entrega más importante de la asignatura, y yo ya la he fallado en el primer intento así que no puedo volver a permitirme fallar de nuevo. Y resulta que ahora encima nuestro profesor de siempre lleva tiempo sin venir y el que nos han puesto, pues lo intenta, pero el pobre sabe de programar en C más o menos lo que yo. Así que subo mi cliente y mi servidor, basados en una implementación TCP concurrente real del servicio ECHO que se me proporciona y sobre la cual se me obliga a basarme, para ver si me podéis echar una mano, porque yo no consigo ver por qué está mal de ninguna de las maneras:
en cierta línea, en el servidor, TCPcalcd.c, tengo una definición, tal que así:

float cod = strtof(c , NULL);

¿Por qué narices no funciona como debería (convierte por ejemplo, un 9, a un número que no tiene nada que ver)?

Subo también el Makefile por si queréis probarla (he puesto algunos printfs indicativos y el código es muy fácil de comprender y está archicomentado). Los comandos para probarla una vez compilada con "make" son ./TCPcalcd en una terminal y a continuación ./TCPcalc en otra nueva (no estoy seguro del correcto funcionamiento en una sóla terminal aprovechándo el modo background), ambas situadasen el directorio de los códigos y el Makefile. No hacen falta parámetros.

Por cierto, ahora que caigo, los headers "socket_utils.h" y "error.h" también me los proporciona el profesor y tengo que usarlos, así que se descarta que el error puede estar ahí, porque al resto de mis compañeros sus servicios sí que les funcionan (y sí, también da la puñetera casualidad de que soy el único no en clase, sino en toda la asignatura este año, con la calculadora remota T.T en fin...).

Se agradece lo que podáis colaborar. Un saludo.

Ficheros - http://www.megaupload.com/?d=8R03MEOH
Un saludo, Jorge.

Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

#2 Mensaje por rir3760 » 10/04/2011 5:02 pm

Hace un rato habia problemas con el servidor (Megaupload) y apenas acabo de descargar el archivo, mañana con mas calma te comento en detalle sobre el cliente y el servidor.

Sin embargo y en buen plan: vas demasiado rapido (o la educacion que estas recibiendo es, por la razon que sea, deficiente) ya que el programa (cliente mas servidor) tienen demasiados errores, por ejemplo en el cliente lees dos lineas seguidas (¿Porque perder la primera?), envias solo los caracteres que forman la cadena pero no el terminador '\0' (en el servidor asumes que si se envia), utilizas gets lo que puede reventar el programa, etc.

En el servidor utilizas de un modo extrañisimo (me faltan palabras) funciones como strcat, por ejemplo:

Código: Seleccionar todo

buf2[0] = strcat (procesar (buf, fd), "");
Ahi hay varios errores, todos ellos graves:

1) "buf2[0]" es un caracter (usualmente con signo), tratas de almacenar ahi un puntero tipo "char *".

2) La funcion procesar retorna la direccion en memoria de su variable local "ret".

3) Agregar "" a una cadena mediante strcat no tiene sentido porque el unico caracter en "" es el '\0'.

Para empezar ayudanos indicando cual era la intencion con esas asignaciones.

De nuevo si tengo un poco de tiempo libre mañana lo reviso con cuidado.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Stoyicker
Mensajes: 3
Registrado: 10/04/2011 9:41 am

#3 Mensaje por Stoyicker » 10/04/2011 11:50 pm

Bueno, en primer lugar, muchas gracias por tu ayuda.

Como bien puntualizas, la educación que me están dando no es muy digna, que digamos. Cada semana nos hacen entregar entre 2 y 4 practicas, depende del peso, y para sacarlas tenemos que buscarnos las mañanas nosotros. El profesor se justifica con que "a cambio", no nos hace exámenes.

Y bueno llendo al lío, lo de que voy muy rápido, pues puede ser. Es que verás, yo para la fecha en la que tenía que haberlo entregado en primera instancia, preparé mi código, hecho desde cero con el sudor y sangre de mi frente. Pero no termino de saber por qué no conseguí hacerlo funcionar y el profesor me ha dicho que "adapte" el código de aquí:

http://www.cc.gatech.edu/classes/cs8113 ... TCPechod.c

http://www.cs.odu.edu/~cs779/comer/TCPecho.c

¿Que vaya puta mierda de ejemplo porque TCPecho no necesita procesar mensajes y actuar en consecuencia? Pues sí, pero qué le voy a hacer, simplemente asumí que los códigos de esas fuentes eran correctos, y me puse manos a la obra.

Respondiendo a tu pregunta del uso de strcat, no sabes de cuántos millones de formas he estado trasteando con las cadenas, y al final la mejor forma que he encontrado de meter una cadena en una variable es con strcat (de ahí que muchas veces concatene una cadena a nada).

Lo que quería conseguir en la línea de código que especificas es lo siguiente:
Como strcat devuelve un puntero al primer elemento del vector de caracteres que resulta de concatenar el vector que retorna procesar(buf, fd), y lo que quiero es guardar en buf2 lo que devuelve procesar, para luego enviarlo al cliente, pues uso el strcat de la forma que te he explicado más arriba, almacenando en el primer elemento del vector el puntero correspondiente (o, hasta que he visto tu mensaje, eso pensaba).

Respecto al uso de gets y puts, es como me han enseñado a leer e imprimir cadenas de caracteres en Fundamentos de Programación I. Ya sé yo que da advertencias hasta hartarse sobre su peligrosidad, pero a nosotros se nos ha educado con el lema de "Un error es un error, una advertencia, hay que ignorarla".

Ladrillaco xD Y muchas gracias por tu interés, en serio :)
Un saludo, Jorge.

Warnerdus
Mensajes: 4
Registrado: 21/12/2018 9:03 am

Calculadora Remota mediante sockets strtof de las narices

#4 Mensaje por Warnerdus » 29/12/2018 11:41 pm

hola perdon por mi inmensa ignorancia pero...... se podria poner archivos .wav para por ejemplo en vez de decir lo de " recalculando" dijera "ya te perdiste inutil" ?

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados