SalveHo un problema con un codice già scritto, mi servirebbe una mano a capire come risolvere
In linea generale devo inserire nome utente e password che vengono inviati al server che ricerca
l'utente in un file. Se lo trova invia "OK" al client (più il permesso), altrimenti invia "NO". Si hanno a disposizione
3 tentativi. Funziona tutto se inserisco utenti validi, se provo ad inventarmi un utente non presente nel file ho
questo output:
Output client
Inserisci nickname: Luca
Inserisci la password:
Login effettuato con successo
Output server
Hai ancora 2 tentativi a disposizione
La read di [nickname] è fallita
Login del client fallito
CHIUSURA SERVER
Metto il codice...
Login lato client:
Login lato server:codice:int login(int sock) { int tentativi = 3; printf("\n----LOGIN----\n"); Utente utente; memset(utente.nickname,0,sizeof(utente.nickname)); memset(utente.password,0,sizeof(utente.password)); char conferma[CONFERMA]; memset(conferma,0,sizeof(conferma)); while(tentativi > 0) { //Acquisizione dati printf("Inserisci nickname: %s", utente.nickname); while(scanf("%s", utente.nickname) == -1){ if(errno != EINTR){ printf("\nErrore scanf\n"); chiudiClient(); } } char *pass = getpass("\nInserisci la password: "); //La password viene nascosta strcpy(utente.password,pass); printf("\n"); //Invio dati while(write(sock, utente.nickname, sizeof(utente.nickname)) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella write di [nickname]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La write di [nickname] è fallita\n"); return -1; } } printf("Errore system call write [nickname]\n"); } while(write(sock, utente.password, sizeof(utente.password)) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella write di [password]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La write di [password] è fallita\n"); return -1; } } printf("Errore system call write [password]\n"); } //Attendo la conferma e ricevo il permesso while(read(sock, conferma, CONFERMA) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella read di [conferma]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La read di [conferma] è fallita\n"); return -1; } } printf("Errore system call read [conferma]\n"); } if(strcmp(conferma, "OK") == 0){ printf("\nLogin effettuato con successo\n"); memset(conferma,0,sizeof(conferma)); //Ricevo il permesso /*int permesso; read(sock,&permesso,4);*/ return 1; //Solo ora per semplicità } if(strcmp(conferma, "NO") == 0){ memset(conferma,0,sizeof(conferma)); --tentativi; if(tentativi == 2){ printf("\nNickname o Password errati: Hai ancora 2 tentativi"); } if(tentativi == 1){ printf("\nNickname o Password errati: Hai ancora 1 tentativo"); } } } if(tentativi == 0) { printf("\nLogin fallito, tentativi esauriti\n"); return -1; } }
Graziecodice:int login(int sock) { int tentativi = 3; while(tentativi > 0) { Utente utente; memset(utente.nickname,0,sizeof(utente.nickname)); memset(utente.password,0,sizeof(utente.password)); //Acquisizione dati while(read(sock, utente.nickname, NICKNAME) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella read di [nickname]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La read di [nickname] è fallita\n"); return -1; } } printf("Errore system call read [nickname]\n"); } while(read(sock, utente.password, PASSWORD) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella read di [password]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La read di [password] è fallita\n"); return -1; } } printf("Errore system call read [password]\n"); } //Cerco l'utente Utente temp = cercaUtente(utente); //Utente trovato if((strcmp(utente.nickname, temp.nickname) == 0) && (strcmp(utente.password, temp.password) == 0)){ while(write(sock,"OK", CONFERMA) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella write di [ok]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La write di [ok] è fallita\n"); return -1; } } printf("Errore system call write [ok]\n"); } memset(utente.nickname, 0, sizeof(utente.nickname)); memset(utente.password, 0, sizeof(utente.password)); //Invio il permesso al client /*int permesso = temp.permesso; write(sock,&permesso,4);*/ return 1; } //Utente non trovato else { while(write(sock,"NO", CONFERMA) <= 0){ if(errno != EINTR){ if(errno == ECONNRESET || errno == EPIPE){ printf("\nErrore nella write di [no]: CONNESSIONE FALLITA\n"); return -1; } else{ printf("La write di [no] è fallita\n"); return -1; } } printf("Errore system call write [no]\n"); } --tentativi; printf("\nHai ancora %d tentativi a disposizione\n", tentativi); memset(utente.nickname, 0, sizeof(utente.nickname)); memset(utente.password, 0, sizeof(utente.password)); } } printf("\nLogin fallito dopo 3 tentativi\n"); return -1; }![]()

Ho un problema con un codice già scritto, mi servirebbe una mano a capire come risolvere
Rispondi quotando