Ciao ho il seguente problema di programmazione di rete:
Client:
codice:
while(1)
{
if( (command = getservice()) != NULL) {
iwrite=0;
i=0;
lenght=30;
while( (i = write(sock_fd, &(command[iwrite]), lenght-iwrite)) > 0 ) {
iwrite += i;
}
if( (strncmp(command,"LIST", 4) == 0) ) {
i=0;
iread = 0;
while( (i = read(sock_fd, &(buff[iread]), lenght-iread)) > 0 ) {
iread += i;
printf("\nRead %d bytes\n",i);
printf("\niread= %d \n",iread);
}
printf("\nFinally %d bytes\n",iread);
for(f=0;f<lenght;f++) {
printf("\nbuff[%d] = %d\n",f,buff[f]);
}
}
}
}
/*Closing socket descriptor*/
close(sock_fd);
}
Server:
codice:
if((strncmp(buff,"LIST",4))==0){
printf("\nLIST function:\n");
n = stringcounter(buff);
iwrite = 0;
i = 0;
string_len = 30;
if(n>0) {
sprintf(buff,"%d",n); /*scrivo il numero di stringhe dentro buff*/
while((iwrite<string_len)&&(i=write(newsock_fd,&(buff[iwrite]),string_len-iwrite)) >0 ) {
if(i<0) {
perror("Writing error\n\n");
close(newsock_fd);
break;
}
iwrite+=i;
printf("\nWrited %d bytes\n",i);
} /*finisce il while*/
printf("\nWriting accomplished\n");
}
if(n<=0) {
printf("\nNon ci sono stringhe nel file di testo!\n");
}
close(newsock_fd);
}
Il client effettua una write della stringa comando, il server lo legge e si comporta di conseguenza:
Se il comando è "LIST" allora deve effettuare una write del numero di stringhe contenute in un file di testo.
Quando vado a stampare il buffer che ha ricevuto il client, succede una cosa strana ovvero, i dati che vengono ricevuti attraverso la socket vengono scritti a partire dalla terza cella dell'array(buffer[2]), a volte stampo anche rimasugli di comandi precedenti, byte rimasti da precedenti operazioni, ma ciò non toglie che il numero che metto nella stringa tramite la sprintf viene memorizzato comunque dalla terza cella in poi. Ho provato con fflush(stdin) ma il problema persisteva allora leggendo vecchi thread ho visto la funzione memset ed ho provato:
codice:
memset((void*)&buff,0,sizeof(buff));
ma ricevo "segmentation fault", sia in questo modo che con "buff" al posto di "&buff".
Idee? Grazie.