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....
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");
e lato server...
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);
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...
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....