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
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 in ricezione analizza il contenuto della mailslot e in dipendenza di esso inizializza una variabile. Tutto questo avviene eseguendo il seguente codice:
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 client lancia un thread per analizzare il codice ricevuto dal server).
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?