Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Eccomi, dato che mi sono iscritto da poco dovevo subito postare qualcosa no?
Ho creato questo sorgente, esso appena riceve una connessione manda al client "Salve" e poi chiede di immettere un passowrd e se si sbaglia si chiude la connessione(avviene anche se si indovina, però volevo provare a vedere se funzionava).
Lo compilo, non mi da errori, però quando lo avvio sulla finestra compaio all infinito tutti caratteri.Mi sapreste aiutare a capire cosa sbaglio o a migliorare il sorgente?
Mi compare all infinito la scritta errore accettazione connessione.
Quando avevo creato in passato un semplice server del genere riuscivo a connettermi e a visualizzare quello che volevo, invece qui mi compare direttamente quella scritta all infinito.
Eccomi, dato che mi sono iscritto da poco dovevo subito postare qualcosa no?
Ho creato questo sorgente, esso appena riceve una connessione manda al client "Salve" e poi chiede di immettere un passowrd e se si sbaglia si chiude la connessione(avviene anche se si indovina, però volevo provare a vedere se funzionava).
Lo compilo, non mi da errori, però quando lo avvio sulla finestra compaio all infinito tutti caratteri.Mi sapreste aiutare a capire cosa sbaglio o a migliorare il sorgente?
La funzione send() restituisce il numero di byte effettivamente inviati, non una stringa.
Inoltre, anche se tu volessi confrontare in C due stringhe, non funzionerebbe mai una cosa del genere:
if (stringa1 == stringa2) { }
per il semplice motivo che in C le stringhe sono trattate come puntatori a carattere e, dal momento che due stringhe diverse risiedono in due locazioni di memoria diverse, il confronto sarà sempre negativo.
semmai dovresti fare una send() con la stringa "Immettere password: ", seguita da una receive() per leggere il messaggio di risposta in un buffer (presumibilmente il client avrà inviato una stringa con la password) e confrontare le due password in questo modo:
if (strcmp(stringa1, stringa2) == 0) {}
La funzione strcmp restituisce -1 se la prima stringa è minore della seconda (in ordine alfabetico), 0 se sono uguali e 1 se la seconda è minore della prima.
Testo quotato
Codice sorgente - presumibilmente C/C++
send(new_sockfd, "Esatto", 7, 0);
closesocket(new_sockfd);
} else {
send(new_sockfd, "Errore", 8, 0);
closesocket(new_sockfd);
}
closesocket(new_sockfd);
}
WSACleanup();
return 0;
}
Puoi leggere questo articolo sul mio sito, è una breve guida pratica all'utilizzo dei socket in ambiente Unix, può esserti utile
send(new_sockfd, "Immettere password: ", 21, 0);//quando vado a scrivere la password mi fa immettere solo un byte, infatti 21 a solo un byte in più
recv(new_sockfd, pass, 8, 0);//appena immetto un carattere per scrivere la password giusta il client(telnet) esce
if(strcmp(pass, "camera")== 0){
printf("Password giusta\n");
}else{
printf("Password errata\n");
}
closesocket(new_sockfd);
}
WSACleanup();
return0;
}
Praticamente non mi fa immettere la tutta la password ma solo un byte dopo "Immettere password: ", altrimenti se cambio 21 con 27 mi visualizza direttamente la password e questo non va bene.
Ultima modifica effettuata da Zimo il 17/08/2009 alle 11:49
Ciao ragazzi per puro caso facendo delle ricerche ho trovato questa ottima applicazione! Frequento la facoltà informatica applicata e da poco che abbiamo iniziato lo studio dei socket per adesso ci hanno detto solamente di smanettare ma nulla di serio ma prima di inziare a creare applicazioni vere vorrei capire bene il concetto! Ho potuto notare questo codice davvero pulito complimenti Zimo e TheKaneB per l'intervento! Ho provato a compilare il codice per vedere il suo funzionamento tutto va bene ma quando vado a inserire la password vera o falsa mi killa il client dicendo che è sempre falsa e non mi fa accedere al terminale di windows! Magari può essere che il server non prende in input la password? Forse tramite 1 scanf si può risolvere? Ovviamente da come avete capito sono alle prime armi ma ci tengo a farla funzionare!Voi siete riusciti?
Grazie in anticipo!