Pagina 1 di 1
programmazione di rete in C
Inviato: mer 19 set 2007, 22:06
da sya54M
salve, sto facendo un programmino in c per effettuare una connessione ftp:
invia il nome utente, il server risponde 331 e quindi ok, ma il programmino acquisisce la stringa sbagliata dalle risposte del server invece di quella consecutiva all'invio del nome utente che contiene l'ok.
oh aperto un soket con:
ho inviato la stringa con il nome utente con:
il server da l'ok.
e devo leggere l'ok con:
ma nella lettura come gia detto non legge l'ok consecutivo all'invio del nome utente, ma legge una parte della striga di benvenuto che non centra niente.
spero di essere stato chiaro e che possiate aiutarmi, ringrazio in anticipo!
Inviato: mer 19 set 2007, 22:18
da V
La stringa di benvenuto viene restituita prima dell' ok?
Perchè se è così il tuo buffer potrebbe essere piccolo....
Inviato: mer 19 set 2007, 22:33
da sya54M
SI, la stringa di benvenuto è prima dell'ok,
ci ho pensato anchio a questo problema e ho provato con un buffer di 100000, ma la striga che mi serve non viene letta
Inviato: gio 20 set 2007, 0:21
da V
Come esegui il parsing della stringa?
Inviato: gio 20 set 2007, 0:59
da sya54M
non usato nessun parser.
mi sugeriresti tu in che modo potrei farlo? non lho mai fatto.
ma è necessario fare il parsing della stringa?
io ho fatto un confronto tra stringhe in questo modo:
il problema è che confronto la stringa sbagliata!
Inviato: gio 20 set 2007, 13:38
da V
Se non sbaglio, in questo modo il confronto viene fatto con l'inizio della stringa e la non c'è l'ok
Forse il tuo buffer è
buffer = buffer + strlen(buffer) - strlen("331")
in questo modo fai il controllo con la parte finale della stringa....
Inviato: gio 20 set 2007, 14:01
da sya54M
si è vero, il confronto viene fatto con l'inizo della stringa come ho fatto io, infatti se venisse letta la striga giusta, il numero 331 con il quale faccio il confronto si troverebbe all'inizio della stringa e quindi dovrebbe essere giusto.
il problema è sempre che la stringa con il 331 (e quindi con l'ok) non viene proprio aquisita con questa funzione:
infatti come gia detto recv acquisisce la prima stringa di benvenuto invece dell'ok
Inviato: gio 20 set 2007, 14:07
da V
A questo punto sospetto che alla fine della stringa di benvenuto ci sia un terminatore ( '\0' )
Dovresti allora leggere ancora dal buffer per acquisire la stringa successiva...
Inviato: gio 20 set 2007, 17:46
da sya54M
infatti ho provato a copiare la funzione per la lettura per eseguirla 2 volte (mi era venuto in mente anche a me) ma il risultato è che viene letta 2 volte la stessa stringa
oppure intendi che sia necessario fare una nuova scrittura prima di una seconda lettura? io ho fatto 2 letture consecutive senza fare una seconda scrittura (ho provato anche a farlo leggere in un loop fino alla giusta condizione ma va all'infinito)
Inviato: gio 20 set 2007, 19:06
da V
oppure intendi che sia necessario fare una nuova scrittura prima di una seconda lettura?
A questo punto proverei a fare così.... non so più cosa dirti....
Inviato: gio 20 set 2007, 19:12
da sya54M
sei grande v! ho aggiunto una seconda scrittura con un "\n" e una seconda lettura e funziona!, quindi per fare una seconda lettura (recv) bisogna per forza fare una seconda scrittura (send) altrimenti legge sempre la stessa cosa.
ora posso andare avanti a correggere altri errorri
grazie
Inviato: gio 20 set 2007, 20:36
da V
Di niente! Hai fatto tutto da solo!
Buon lavoro!