Ciao a tutti,
sto realizzando un'applicazione costituita da 2 programmi client e server che comunicano tra loro.
Per effettuare un determinato controllo, ho bisogno che il server comunichi al client un codice composto da un solo numero di tipo int; nello specifico, se il controllo è andato a buon fine, il server comunica 2, altrimenti comunica 3.
lo scambio di questo codice di controllo avviene attraverso mailslot (non posso fare altrimenti), il server invia
il client in ricezione analizza il contenuto della mailslot e in dipendenza di esso inizializza una variabile. Tutto questo avviene eseguendo il seguente codice:codice:int esitoBAD = 3; int esitoGOOD = 2; mailslotControllo = CreateMailslot("\\\\.\\mailslot\\controllo",TAGLIA,MAILSLOT_WAIT_FOREVER,NULL); //in caso di esito negativo esegue l'istruzione conferma1 = WriteFile(mailslotControllo, esitoBAD,sizeof(esitoBAD)+1, &scritti1, NULL); //in caso di esito positivo conferma3 = WriteFile(mailslotControllo, esitoGOOD,sizeof(esitoGOOD)+1, &scritti3, NULL);
(il client lancia un thread per analizzare il codice ricevuto dal server).codice://in main... prenotazione_esistente = CreateFile("\\\\.\\mailslot\\controllo", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); hthread3 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadcontrollaprenotazioni, prenotazione_esistente,NORMAL_PRIORITY_CLASS,&threadcontrolloID); void threadcontrollaprenotazioni(HANDLE mailslot) { BOOL esitoprenotazione; int esito; DWORD letti; esitoprenotazione = ReadFile(mailslot, esito, TAGLIA, &letti, NULL); printf("ho letto dalla mailslot di controllo\n"); printf("esito = %d\n", esito); //qui scopro l'errore!! if (esito == 3) var_controllo = 3; else if (esito == 2) var_controllo = 2; }
IL PROBLEMA E' QUESTO: il client non riceve affatto 2 o 3 dalla mailslot, ma dei numeri assurdi preceduti dal segno -
(ad esempio dove dovrebbe ricevere 3 riceve -858993460 !!)
Che cosa sbaglio? e come posso risolvere?

Rispondi quotando
