Ciao a tutti,
sto realizzando un programma client server che invia e legge dei dati di vario tipo.
Mi sono accorto che quando invio al termine di una serie di altri dati una stringa che è relativa ad un path di un file alla fine di questa quando viene letta dal server vengono aggiunti dei caratteri che non centrano niente (!£$%& ecc...due o tre dipende) e che ovviamente fanno poi fallire l'elaborazione di quello che voglio fare...
La parte critica è la seguente....lato client....
e lato server...codice:cout << "PATH: "; cin >> path; l_dato = (uint32_t) path.length(); cout << "Data length: " << l_dato << endl; cout << path << endl; n = write(sockfd,&l_dato,4); if (n < 0) error("ERROR8"); n = write(sockfd,path.c_str(),path.length()); if (n < 0) error("ERROR9");
nel server faccio un ciclo per passare delle volte un intero file quindi uso più read...ma il problema persiste anche con una singola lettura....senza ciclo intendo...codice:n = read(newsockfd,&add.data_length,4); if (n < 0) error("ERROR reading from socket--add-data_length"); add_mess->data_length = add.data_length; ... add_mess->dato = (char* )malloc(((unsigned long int)add_mess->data_length)*sizeof(char)); for (k=0;k<=add_mess->data_length; k=k+n){ n = read(newsockfd,&add_mess->dato[k],(unsigned long int)add_mess->data_length - k); //printf("k---> %d--->%d\n",k,n); if (n < 0) error("ERROR reading from socket--add"); if (n==0) break; } printf("Mess:%s\n",add_mess->dato);
sembra quasi che si sporchi il buffer di lettura perchè il valore che gli passo relativoa quanto deve leggere da stream è corretto...
qualcuno mi pùò illuminare....

Rispondi quotando
