sono riuscito a creare un server che gestisce più client, in poche parole un client invia al server un messaggio da inviare al client destinatario, all'inizio del messaggio c'è il codice del client destinatario.
Uso la funzione CreateThread in questo modo
Codice:
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) thread, (LPVOID) clientsd, 0, NULL);
che invia il client in questa parte del codice
Codice:
void thread(int clientsd){
char buffer[256];
char id_dest[4];
struct lista_client *ptr;
ptr=calloc(1,sizeof(struct lista_client));
while(recv(clientsd, buffer, 255, 0) > 0){
ptr=head;
strncpy(id_dest,buffer,4); //prelevo dalla parte iniziale del messaggio il codice del client destinatario
id_dest[4]='\0';
//cerco il client destinatario
while(ptr->id_utente != atoi(id_dest) && ptr != NULL){
ptr=ptr->next;
}
clientsd=ptr->sd;
//invio il messaggio al destinatario
send(clientsd, buffer, 255, 0);
}
}
Adesso però ho un altro problema, quando uno dei client invia il messaggio arriva a destinazione, poi in seguito quando il secondo client cerca di inviare un messaggio succede una cosa strana, arrivato verso la riga
Codice:
clientsd=ptr->sd;
il programma ritorna indietro come se ci fosse una sorta di ricorsione in sospeso.
Quando si usa un thread a fianco del titolo della function il compilatore mette una sorta di logo che indica la posizione del thread, è proprio questo logo che si sposta quando il secondo client cerca di inviare il messaggio e non capisco perchè.
Forse non sono stato chiaro ma spero mi possiate aiutare.
PS. il codice è un po rozzo ma a me interessa il comportamento del thread.
Grazie