Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c]errore nella recv

  1. #1

    [c]errore nella recv

    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 ????

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Un SMS ??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    scusa so che nn ami le abbreviazioni..

    un sms nel senso uno stampa..

    mi viene stampata ciò che io ho scritto ma al posto dei valori esatti ..dei valori del tutto sbagliati

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da claudia_90
    scusa so che nn ami le abbreviazioni..
    A parte il fatto che non ami le abbreviazioni *nei forum*, non capisco cosa c'entri un SMS che significa una cosa ben precisa che non ha a che fare con la questione ...

    un sms nel senso uno stampa..
    Scusa ma è un "senso" tutto tuo ... se ci dobbiamo capire, dobbiamo anche scrivere correttamente ...

    mi viene stampata ciò che io ho scritto ma al posto dei valori esatti ..dei valori del tutto sbagliati
    Dato che non c'è tutto il codice per provarlo, poco si può dire ...

    Intanto, facilita la comprensione indicando con precisione a quale linea con recv ti riferisci.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    hai ragione scusami...

    cmq parlo della recv in leggiposto dopo il while(q<numposti)

    codice:
    char risp[7];
    	int q=0;
    
    	while(q<numposti)
    	{
    			memset(risp,0,sizeof(risp));
    			errore=recv(conn,risp,sizeof(risp),0);
    			if(errore<0)

  6. #6
    comunque per chi vuole il programma intero non ho problemi ad inviarlo..

    è per visual studio.

  7. #7
    in tutto il programma..

    tra client e server ..

    quando ho recv(....)

    ho come un interruzione cioè

    aspetta ciò che scrive..la server...o cioè che scrive il client..

    in un caso.. non aspetta niente..

    while(q<numposti)
    {
    int r=recv(conn,risp,7,0);

    da cosa può dipendere.. ???

    aiutoooooo -.-"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.