Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] passaggio di un intero tramite mailslot

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La variabile va passata per indirizzo ...

    esitoprenotazione = ReadFile(mailslot, &esito, TAGLIA, &letti, NULL);

  3. #3
    se in ricezione al ReadFile metto & mi esce la finestra di Windows per gli errori e mi chiede di chiuderlo...

    forse faccio un uso improprio di qualche funzione:
    volendo scrivere un intero nella mailslot uso

    codice:
    WriteFile(HANDLEmailslot,intero,sizeof(intero), &scritti1,NULL);
    giusto?
    Ho qualche perplessità sul dover usare o meno "sizeof"...

    in ricezione invece dovrei usare

    codice:
    ReadFile(HANDLEmailslot,&intero,MAXbyteLETTI,&read,NULL);
    vero?

    xchè nn funziona!?!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Allora ...

    Per la scrittura devi scrivere

    codice:
    WriteFile(HANDLEmailslot, &intero, sizeof(intero), &scritti, NULL);
    Per la lettura

    codice:
    ReadFile(HANDLEmailslot, &intero, sizeof(intero), &letti, NULL);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.