cerco di spiegare un pò il mio problema..prima che divento matta..
client :
codice:
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;
ecco il codice di leggiposti
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 :
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;
usando il brekpoint ho che il client invia bene i valori..
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 ????