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);
}
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();
}
Premetto che se l'inserimento lo faccio a mano: chiamando la funzione insertPeerToList con elementi creati da me, funziona tutto alla perfezione.
Ringrazio tutti in anticipo per qualsiasi tipo di aiuto.
Grazie