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 :
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();
}
e del server :
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