Estoy haciendo una aplicacion cliente/servidor con sockets y estoy en un punto que necesito consultar los dominios de una marca.
Estoy haciendo pruebas y me pasa una cosa rara.
El cliente envia el nombre de la marca y el server la recibe, hasta aqui todo bien. Para comprobar que llega lo correcto hago un print en el server y verdaderamente imprime lo correcto.
Entonces con la variable que tiene la marca que quiero consultar llamo a una funciona que se llama "consultar marca" y aqui es donde viene el problema
La cuestion es que dentro de esa funcion hago otro print para ver si se me printa lo que he he pasado por parametreo dentro de la función, el problema es que la primera vez no se printa pero la segunda si y asi sucesivamente. Es decir que la funcion es llamada cada 2 veces, es una cosa muy rara.
Haber si me podeis echar un cable.
El CLIENTE:
Código c:
Ver original
while(opcio!=7){ printa_menu(); // Obtenim la opcio introduida per l'usuari bzero(buffer, sizeof(buffer)); switch(opcio){ // Opció HELLORQ OK!! case 0: stshort(1,buffer); //Posem el codi de operacio al buffer sendto(sockClient, buffer, tamany_tshort, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); bytes_rebuts= recvfrom(sockClient, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &client_t); break; //Opcio LlistRQ mostrem la llista dels bookmarks OK!! case 1: stshort(3,buffer); //Posem el codi de operacio al buffer sendto(sockClient, buffer, tamany_tshort, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); bzero(buffer, sizeof(buffer)); bytes_rebuts= recvfrom(sockClient, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &client_t); printMarkTableFromAnArrayOfBytes(buffer+tamany_tshort, bytes_rebuts); //Funcio per printar els bookmarks, fem +tamany_buffer per eliminar el codi de operacio break; case 2: stshort(6, buffer); tamany_buffer=tamany_buffer+tamany_tshort; sendto(sockClient, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); break;
Es el case 2, os pongo todo el case haber si el problema viene de otro lado
Y el SERVIDOR:
Código c:
Ver original
void consultarMarca(char marca[100], struct _markTable* taula_de_Marques ) { } while(1) { bzero (buffer, sizeof(buffer)); bytes_rebuts = recvfrom(sockServer, buffer,sizeof(buffer),0, (struct sockaddr*)&server, &server_t); if (bytes_rebuts== -1) { } switch(ldshort(buffer)) { //Enviem el hello world OK!!!!!!!!!! case 1: bzero(buffer, sizeof(buffer)); stshort(2,buffer); sendto(sockServer, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); break; //Enviem la taula de marques OK!!!!!! case 3: bzero(buffer, sizeof(buffer)); //Buidem el buffer stshort(4,buffer); //Posem el codi de operacio al buffer memcpy(buffer+t_short,markTable_to_byteArray,tamany_markTable); //Copiem al buffer, la taula de marques indicant el seu tamany sendto(sockServer, buffer, tamany_markTable, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); break; //Consulta d'una marca consultarMarca(buffer+2,markTable); bzero (buffer, sizeof(buffer)); break; } } return 0; }