Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - recv non funziona
Forum - C/C++ - recv non funziona

Avatar
claudia_brontola (Normal User)
Rookie


Messaggi: 40
Iscritto: 06/11/2012

Segnala al moderatore
Postato alle 21:43
Giovedì, 22/11/2012
Questo topic è stato chiuso dal moderatore

questo è cio che ho nel client..



char postistr[TEXT_LENGTH];
       int numposti;
       puts("inserisci il numero di posti da prenotare");
       errore=scanf("%s",postistr);
      
       if(verificastringa(postistr)!=-1)
       {
            numposti=atoi(postistr);
       }
       else numposti=-1;
       if(numposti<=0|| numposti>127)
       {
            puts("Errore:    numero posti inserito non valido.al max è possibile prenotare 127 posti,SALA PERMETTENDO");
       }
       else
       {
          
           leggiposti(conn_s,numposti);
       }
      
       break;



codice leggiposti :

void leggiposti(SOCKET conn,int numposti) // permette di prenotare uno o più  posti
{
    char msg[1000];
    msg[0]=2;
    msg[1]=(char) numposti;
    int t=0;
    while(t<numposti)
    {
            int q=0;
            char posto[TEXT_LENGTH];
            puts("\ninserisci il numero della fila");

            while(q<=0 || q>127)
            {
                    errore=scanf("%s",posto);

                    if(errore<0)
                        {
                            if(WSAGetLastError()==WSAEINTR)
                                    {
                                    printf("Errore nella scanf");
                                    SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                                    exit(-1);// uscita
                                    }
                        }

            if(verificastringa(posto)!=-1)
                {
                        q=atoi(posto); // converte stringa in intero
                }
            else
                    q=-1;
                    if(q<=0 || q>127)
                        puts("\n\nErrore:numero fila inserito non valido.inserisci il numero fila");
            } // chiusura del while

            msg[2+(t*2)]=(char)q;

            puts("\ninserisci il numero del posto");
            q=0;

            while( q<=0 || q>127)
            {
                    errore=scanf("%s",posto);
                    if(errore<0)
                    {
                        if(WSAGetLastError()==WSAEINTR)
                        {
                            printf("Errore nella scanf");
                            SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                            exit(-1);// uscita
                        }
                    }

                if(verificastringa(posto)!=-1)
                {
                        q=atoi(posto);
                }
                else
                    q=-1;

                    if(q<=0||q>127)
                        puts("\n\nErrore:numero posto inserito non valido.inserisci il numero di posto");
            }

            msg[2+(t*2)+1]=(char)q;
            ++t;
    } // chiudo while controllo su t
    if(conn<0)
        printf("impossibile connettersi \n");
    int errore=send(conn,msg,(numposti*2)+2,0);

    if (errore<0)
    {
        if(WSAGetLastError()==WSAEINTR)
                {
                printf("errore nella send");
                SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                exit(-1);// uscita
                }
    }
    
    char risp[7];
    int q=0;

    while(q<numposti)
    {
            memset(risp,0,sizeof(risp));
            errore=recv(conn,risp,sizeof(risp),0);
            if(errore<0)
            {
                    if(WSAGetLastError()==WSAEINTR)
                    {
                    printf("errore nella recv");
                    SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                    exit(-1);// uscita
                    }
            }

        if(risp[0]=='E')
        {
                errore=printf("\nil posto %d,%d è occupato\n", risp[5],risp[6]);
                if(errore<0)
                {
                        if(WSAGetLastError()==WSAEINTR)
                        {
                            printf("errore nella printf");
                            SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                            exit(-1);// uscita
                        }
                }
        }
        else
            if(risp[0]=='Y')
                {
                        errore=printf("\n\nil posto %d,%d non è disponibile nella sala\n", risp[5],risp[6]);
                        if(errore<0)
                        {
                            if(WSAGetLastError()==WSAEINTR)
                            {
                            printf("errore nella printf");
                            SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                            exit(-1);// uscita
                            }
                        }
                puts("\ncontrollare le dimensioni max della sala tramite la funzione visualizza");
            }
            else
                    errore=printf("\nil posto %d,%d è stato prenotato con codice %s \n", risp[5],risp[6],risp);
                    if(errore<0)
                        {
                            if(WSAGetLastError()==WSAEINTR)
                            {
                            printf("errore nella printf");
                            SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                            exit(-1);// uscita
                            }
                        }

            q++;
    } // chiudi la while controllo sulla q
}


nel server ho...


int t=0;
            char risp[7];
            int r=recv(conn,buffer,sizeof(buffer),0);
            if(r==0||r==-1)
            {
                    if(WSAGetLastError()==WSAEINTR)
                    {
                        SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                        exit(-1);
                    }
            }
            
            int numposti=(int) buffer[1];
            int s;
            
            while(t<numposti)
            {
                
                    s=occupaposto((buffer[2]),(buffer[3]));
                    risp[5]=buffer[2];
                    risp[6]=buffer[3];
                    if(s==-2)
                    {
                        //posto non disponibile
                            risp[0]='Y';
                            risp[1]='Y';
                            risp[2]='Y';
                            risp[3]='Y';
                    }
                    else
                        if(s==-1)
                        {
                                //posto è occupato
                            risp[0]='E';
                            risp[1]='E';
                            risp[2]='E';
                            risp[3]='E';
                        }
                        else
                        {
                                //posto libero
                            errore=sprintf(risp,"%d",s);
                            if(errore<0)
                            {
                                if(WSAGetLastError()==WSAEINTR)
                                {
                                        SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                                        exit(-1);
                                }
                            }
                        }
                        int errore=send(conn,risp,sizeof(risp),0);
                        if (errore<0)
                        {
                            if(WSAGetLastError()==WSAEINTR)
                            {
                                printf("errore nella send");
                                SendMessage(HWND_BROADCAST,my_mex_type,0,0);
                                exit(-1);// uscita
                            }
                        
                        }
                        t++;
            } //chiude il while

                
                
            }
        break;

il codice occupaposto non lo metto .. è molto semplice e sopratt l'errore non è li...

l'errore che non capisco è xke dopo che faccio send(conn,risp,sizeof(risp),0)

nella recv che ho nel client.. non mi riceve questi valori... ma caratteri strani..a volte "server" a volte "avvio"..

dove commetto errori??? non riesco a vederli :(




..Si ritorna solo andando via ..
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:14
Venerdì, 23/11/2012
Questo topic è in violazione di una o più norme del regolamento: http://www.pierotofy.it/pages/extras/forum/9/3839-regolame ... .
    
Dopo averlo letto riapri un nuovo topic assicurandoti di aver rispettato le regole. Grazie per la tua pazienza.


Ingegnere Informatico
https://ldlagency.it
PM