Cita:
Iniciado por sam90 Pasanos el codigo completo. Es seguro que el error lo tienes en otro lado....
Aqui lo tienes:
La parte del Cliente te pongo todo el while a ver si es por otra cosa, pero la parte que estoy haciendo ahora es el case 3.
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 bzero(buffer, sizeof(buffer));
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
bzero(buffer, sizeof(buffer));
break;
//Introduim una marca per teclat i ens retorna la URL asociada OKK
case 2: stshort(6, buffer);
printf("\nIntrodueix la marca que vols consultar: \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));
bytes_rebuts= recvfrom(sockClient, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &client_t);
if(ldshort(buffer)!=12)
{
printf("\nLa URL de la marca consultada es: %s",buffer
+tamany_tshort
);
}
else
{
printf("\n %s",buffer
+tamany_tshort
); }
bzero(buffer, sizeof(buffer));
break;
case 3: //Afegir una nova entrada a la taula
stshort(5, buffer);
printf("\nIntrodueix la nova marca que vols afegir: \n"); scanf("%s",&afegir_marca
); t_afegir_marca
=strlen(afegir_marca
);
printf("\nIntrodueix la URL de la marca que vols afegir: \n");
t_afegir_URL
=strlen(afegir_URL
); tamany_buffer=tamany_tshort+t_afegir_URL+t_afegir_marca;
strcat(afegir_marca
,afegir_URL
); strcpy(buffer
+2,afegir_marca
); sendto(sockClient, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
printf("%s\n",buffer
+tamany_tshort
); break;
}
} //end while(opcio)
Esta es la parte del servidor donde llamo a la funcion para separar las cadenas, te pongo todo el while pero es el case 5:
Código C:
Ver original//La funcion para separar las cadenas
void afegirMarca(char *buffer, struct _markTable* taula_de_Marques)
{
char *URL;
char *marca;
char *buf_aux;
printf("La longitud del buffer es: %d", longitud
);
printf("\nLa marca es: %s\n",marca
);
printf("\nLa URL es: %s\n",URL
);
}
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));
bzero (buffer, sizeof(buffer));
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));
bzero (buffer, sizeof(buffer));
break;
//Afegir una nova entrada a la taula
case 5:
printf("Antes de la funcion= %s\n", buffer
+2) afegirMarca(buffer+2,markTable);
// printf("Despues de la funcion= %s", buffer+2);
bzero(buffer, sizeof(buffer));
break;
//Consulta d'una marca OK!!!
case 6: URL_consultada = consultarMarca(buffer+2,markTable);//Cridem a la funcio per buscar la URL asosciada a la marca
if(!strcmp(URL_consultada
,"Error marca no trobada"))//En cas de no trobar la marca posearem un codi o un altre {
stshort(12,buffer);
}
else
{
stshort(7,buffer);
}
tamany_buffer
=t_short
+strlen(URL_consultada
); //Mesurem el nou tamany de buffer strcpy(buffer
+t_short
,URL_consultada
); sendto(sockServer, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); //Enviem la URL mes el codi d'operacio
bzero (buffer, sizeof(buffer));
break;
}
Haber si entre los 2 encontramos una solucion, gracias