View Single Post
Old 05-03-2009, 17:00   #5
Prince_81
Senior Member
 
L'Avatar di Prince_81
 
Iscritto dal: May 2008
Messaggi: 412
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

Ultima modifica di Prince_81 : 06-03-2009 alle 09:46.
Prince_81 è offline   Rispondi citando il messaggio o parte di esso