cerco di spiegare un pò il mio problema..prima che divento matta..
client :
ecco il codice di leggiposticodice:case '2': 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: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 :
usando il brekpoint ho che il client invia bene i valori..codice:case '2': { recv(conn,buffer,sizeof(buffer),0); int t=0; char risp[7]; 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 int err=send(conn,risp,sizeof(risp),0); if(err<0) { if(WSAGetLastError()==WSAEINTR) { printf("errore nella send"); SendMessage(HWND_BROADCAST,my_mex_type,0,0); exit(-1);// uscita } } send(conn,"\n",strlen(buffer),0); caricamappa(); } break;
mi passa il controllo sul server .. che fino a occupaposto funziona...
dopo occupa posto salvo tutto ciò che occorre su risp e invio con la send..
ma qui nn passa di nuovo il controllo sulla socketclient in modo tale che può legge ciò che ho scritto.. ma è come se le due parti nn stiano + in comunicazione..
e così sul client viene stampato un sms non di eerrore ma di valori che nn so proprio dove prende..
cosa mi sfugge ????

Rispondi quotando
