Salve ragazzi ho un problema e non riesco a venirne a capo.
L'applicazione è un server che riceve connessioni da vari client
Il client stabilita la connessione invia una serie di caratteri (il proprio nome)
Il server legge il nome del client, ricava il relativo ip e inserisce queste informazioni in una lista.
Il problema è che la lista non si popola in maniera corretta:
in particolare il primo elemento è inserito bene (beh, è il primo), quando inserisce il secondo e stampo la lista mi fa vedere 2 elementi con gli stessi attributi, come se ci fosse stata una sorta di sovrascrittura.
I successivi (al secondo) elementi mi mantengono la lista fissa a 2 elementi con attributi identici (gli stessi dell'ultimo elemento inserito).
Vi riporto le funzioni, le quali vengono chiamate secondo l'ordine riportato
codice:[...] /*Il server si mette in ascolto */ while(keepAlive){ if((acceptedSocket=accept(sd,(struct sockaddr *)NULL,NULL))<0){ #ifdef DEBUF perror("errore in accept\n"); #endif exit(-1); } else{ #ifdef DEBUG printf("il server ha accettato una connessione\n"); fflush(stdout); #endif readName(acceptedSocket); } fflush(stdout); } }codice:void readName(int socketID) { char a; char buffer[MAXSIZE]; int i=0; while(read(socketID,&a,1) > 0){ if(a!='!') buffer[i++]=a; else break; } buffer[i]='\0'; fflush(stdout); iP = getPeerIP(socketID); //sendList(socketID); insertPeerToList(iP, buffer); }Premetto che se l'inserimento lo faccio a mano: chiamando la funzione insertPeerToList con elementi creati da me, funziona tutto alla perfezione.codice:void insertPeerToList(char *iP, char *name){ PEERPTR newPeer= malloc(sizeof(PEER)); newPeer->nome=name; newPeer->ip= iP; PEERPTR temp; temp = firstElement; if(temp!=NULL){ while(temp->next != NULL) temp=temp->next; temp->next=newPeer; } else firstElement=newPeer; printList(); }
Ringrazio tutti in anticipo per qualsiasi tipo di aiuto.
Grazie

), quando inserisce il secondo e stampo la lista mi fa vedere 2 elementi con gli stessi attributi, come se ci fosse stata una sorta di sovrascrittura.
Rispondi quotando
