Necessito una ayudita.
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 originalwhile(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);
printf("%s\n", buffer
+tamany_tshort
); //Printem per patalla ell hello world 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);
printf("\nIntrodueix la marca que vols consulta: \n"); scanf("%s",&marca_consulta
); tamany_buffer
=strlen(marca_consulta
); strcpy(buffer
+tamany_tshort
,marca_consulta
); tamany_buffer=tamany_buffer+tamany_tshort;
sendto(sockClient, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
printf("\n buffer= %s",buffer
+2); 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 originalvoid consultarMarca(char marca[100], struct _markTable* taula_de_Marques )
{
printf("Despues de la funcion: %s", marca
);
}
while(1)
{
bzero (buffer, sizeof(buffer));
bytes_rebuts = recvfrom(sockServer, buffer,sizeof(buffer),0, (struct sockaddr*)&server, &server_t);
if (bytes_rebuts== -1)
{
printf("Error al rebre dades, bytes rebuts= %d\n\n", bytes_rebuts
); }
switch(ldshort(buffer))
{
//Enviem el hello world OK!!!!!!!!!!
case 1: bzero(buffer, sizeof(buffer));
stshort(2,buffer);
strcpy(buffer
+t_short
,"HELLO WORLD"); tamany_buffer
=t_short
+strlen(buffer
+1); 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
case 6: printf("\nAntes de la funcion %s\n",buffer
+2 );
consultarMarca(buffer+2,markTable);
bzero (buffer, sizeof(buffer));
break;
}
}
return 0;
}