ciao a tutti...
non riesco a capire il xke mi chiude subito il server
se cerco di eseguire il case 2
vi posto qui il mio codice dei vari switch case..e se necessario l'intero codice del programma..
client :
e del server :codice:k: while((choise=comunicazione(conn_s))=='r') { printf("client:inserire numero valido \n"); } switch (choise) { case '0': exit(0); break; case '1':visualizzamappa(conn_s); ;break; case '2': char postistr[TEXT_LENGTH]; int numposti; puts("inserisci il numero di posti da prenotare"); errore=(scanf("%s",postistr)); if(errore<0) { if(WSAGetLastError()==WSAEINTR) { printf("errore nella scanf"); SendMessage(HWND_BROADCAST,my_mex_type,0,0); exit(-1);// uscita } } 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( numposti,conn_s); break; case '3':disdici(conn_s); break; default: break; } printf("client:proseguire con un altra operazione? Y per si altro per no: "); fgets(buffer,MAX,stdin); if(buffer[0]=='y' || buffer [0]=='Y') { if(send(conn_s,"y",sizeof(buffer),0)==-1) { if(WSAGetLastError()==WSAEHOSTDOWN) { printf("client:errore nella send"); SendMessage(HWND_BROADCAST,my_mex_type,0,0); system("PAUSE"); exit(-1); } } system("PAUSE"); goto k; } system("PAUSE"); WSACleanup(); }
codice:switch (choise) { // esci case 0: printf("uscita \n"); send (conn,"0",strlen(buffer),0); //strlen restituisce lunghezza della stringa //chiusura del socket if(closesocket(conn) ==SOCKET_ERROR) { fprintf(stderr,"server :errore nella chiusura del socket"); exit(EXIT_FAILURE); } //rimuovo il file alla chiusura remove("codici"); remove("mappa"); //terminazione dell utilizzo di Windows Socket per tutti i thread WSACleanup(); exit(0); break; //visualizzare la mappa case 1: if(priorita==0 ||priorita==2) { char postidainv[dim1*dim2]; matrixtoposti(postidainv); send(conn,postidainv,dim1*dim2,0); send(conn,"1",strlen(buffer),0); } else { send(conn,"r",MAX,0); goto k; break; } caricamappa(); break; //prenotare i posti case 2: if(priorita ==1 || priorita ==2) { int t=0; char risp[7]; int numposti=(int) buffer[1]; char buffer2[1000]; int r=recv(conn,buffer2,sizeof(buffer2),0); if(r==0|| r==-1) { if(WSAGetLastError()==WSAEINTR) { // SE ERRORE DOVUTO AD UNA INTERRUZIONE SendMessage(NULL,my_mex_type,0,0); //invio messaggio indicante errore nella comunicazione } } int s; while(t<numposti) { s=occupaposto((buffer2[t*2])-1,(buffer2[1+(t*2)])-1); risp[5]=buffer2[t*2]; risp[6]=buffer2[1+(t*2)]; 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[0]='E'; risp[0]='E'; risp[0]='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); } } } send(conn,risp,7,0); t++; } //chiude il while send(conn,"2",strlen(buffer),0); } else { send(conn,"r",MAX,0); goto k; break; } caricacodici(); break; //disdire i posti case 3: if(priorita==1 || priorita ==2) { if(buffer[1]=='C') { int cod; char codice[4]; if(recv(conn,codice,sizeof(codice),0)<0) { printf("impossibile leggere il messaggio"); if(WSAGetLastError()==WSAEINTR) { SendMessage(HWND_BROADCAST,my_mex_type,0,0); exit(-1); } } sscanf(codice,"%d",&cod); char postodadisdire[2]; if(recv(conn,postodadisdire,sizeof(postodadisdire),0)<0) { if(WSAGetLastError()==WSAEINTR) { SendMessage(HWND_BROADCAST,my_mex_type,0,0); exit(-1); } } int s=liberaposto(cod,(postodadisdire[0])-1,(postodadisdire[1])-1); char risp[2]; if(s==1) { risp[0]='1'; //1 indica prenotazione disdetta risp[1]='1'; send(conn,risp,sizeof(risp),0); } else { risp[0]='E'; //con E indico che è occupato risp[1]='E'; } send(conn,"3",strlen(buffer),0); } } else { send(conn,"r",MAX,0); goto k; break; } salvamappa(conn); salvacodici(); break; default: break; } // chiude lo switch

Rispondi quotando

) mi pare che la comunicazione vera e propria avvenga in leggiposti, che non hai riportato.
