PDA

View Full Version : [ftp]


Luc@s
05-10-2003, 09:42
Come posso rendere il <CRLF>(Carrel Return Fiel credo) in C++???
Mi serve perche del RFC dell' FTP ho letto che per stabilire una connessione si fa cosi:

USER <SP> <username> <CRLF>
PASS <SP> <password> <CRLF>
ACCT <SP> <account-information> <CRLF>
CWD <SP> <pathname> <CRLF>
CDUP <CRLF>
NOOP <CRLF>



P.S: ma i vari campi sono di tipo char dovendo essere ASCII??
P.S2: ma i file che trasmetto devono essere grupi di byte o posso inviare il tipico .zip?


Tnk

cionci
05-10-2003, 09:49
"/r/n"

Anzi, per evitare equvoci (sul cotenuto di /n che cambia da sistema sistema):

const char crlf[] = {13, 10, '\0'};

Luc@s
05-10-2003, 09:50
tnk e per i 2 PS????


Cmq grazie mille per la pazienza per le mie domande banali:)

cionci
05-10-2003, 09:52
PS: tutte stringhe di char...
PS2: tu devi inviare una sequenza di byte...che poi volendo può essere un file che leggi dal disco...quindi anche uno zip o qualsiasi altro tipo di file...

Luc@s
05-10-2003, 09:56
ok x il ps1.
X i file............. ma se io gli carico un file da inviare lui mi carica la rappresnetazione in byte del files, giusto??

Luc@s
05-10-2003, 10:02
Dev' essere una cosa tipo questa?


const char crlf[] = {13, 10, '\0'};
char user[] = "es@es.it";
char pws[] = "pws";
char acc_info[] = "";
char path[] = "/";

char header[] =
"USER <SP> " + user + crlf,
"PASS <SP> " + pws + crlf,
"ACCT <SP> " + acc_info + crlf,
"CWD <SP> " + path + crlf;
"CDUP " + crlf,
"NOOP" + crlf;


Pero non so se il char accetta l'operatore + come modo per appendere :(
Potrei usare uno string e poi trasformarlo in char con .c_str() ma nn so se è la stessa cosa.

cionci
05-10-2003, 10:06
Orrore !!! Assolutamente non lo accetta !!!

Usi un bel tipo string e concateni tutte le tue belle stringhette !!!

cionci
05-10-2003, 10:06
Originariamente inviato da Luc@s
ok x il ps1.
X i file............. ma se io gli carico un file da inviare lui mi carica la rappresnetazione in byte del files, giusto??
Beh direi...quale altra rappresentazione conosci ?

Luc@s
05-10-2003, 10:06
Originariamente inviato da cionci
Orrore !!! Assolutamente non lo accetta !!!

Usi un bel tipo string e concateni tutte le tue belle stringhette !!!

Ok ma poi lo accetta il protocco FTP una string???

cionci
05-10-2003, 10:08
Comunque non puoi fare un comandone intero come hai fatto ora... Devi attendere la risposta del server FTP ad ogni tuo comando !!!

Luc@s
05-10-2003, 10:08
Originariamente inviato da cionci
Beh direi...quale altra rappresentazione conosci ?

Quindi mi invia qualsiarsi tipo di file.............e me lo ricostruisce di la, giusto???

cionci
05-10-2003, 10:08
Originariamente inviato da Luc@s
Ok ma poi lo accetta il protocco FTP una string???
Lo converti con c_str()...

cionci
05-10-2003, 10:09
Originariamente inviato da Luc@s
Quindi mi invia qualsiarsi tipo di file.............e me lo ricostruisce di la, giusto???
Se gli dai i comandi giusti sì :)

Luc@s
05-10-2003, 10:10
Originariamente inviato da cionci
Lo converti con c_str()...

cioe quello che avevo pensato io???'

Luc@s
05-10-2003, 10:13
const char crlf[] = {13, 10, '\0'};
char user[] = "es@es.it";
char pws[] = "pws";
char acc_info[] = "";
char path[] = "/";

string header;
header += "USER <SP> ";
header += user + crlf;
header += "PASS <SP> ";
header += pws + crlf;
header += "ACCT <SP> " + acc_info + crlf;
header += "CWD <SP> " + path + crlf;
header += "CDUP " + crlf;
header += "NOOP" + crlf;
char ftp_header[] = header.c_str();


A me cosi non va pero:(

Se gli dai i comandi giusti sì
Che trovo nel RFC?

cionci
05-10-2003, 10:20
Sì...

Non porta che tu assegni la stringa ad un vettore di char...

Quando vuoi inviare i dati semplicemente passi direttamente comando.c_str() e la dimensione del comando comando.size() alla funzione che spedisce il comando...

Comunque ripeto non puoi costruire tutto il gruppo di comandi così...devi inviare un comando alla volta ed aspettare la risposta dal server !!!

Luc@s
05-10-2003, 10:23
Originariamente inviato da cionci
Comunque ripeto non puoi costruire tutto il gruppo di comandi così...devi inviare un comando alla volta ed aspettare la risposta dal server !!!

Lo so..........ma era per sapere se erano corretti i comandi.
Mi consigli di fare un controllo sul testo della risposta?

P.S: <SP> cos'è?

cionci
05-10-2003, 10:24
Originariamente inviato da Luc@s
Mi consigli di fare un controllo sul testo della risposta?
Devi farlo...per rispettare il protocollo !!! Leggiti l'RFC !!!

Luc@s
05-10-2003, 10:26
Originariamente inviato da cionci
Devi farlo...per rispettare il protocollo !!! Leggiti l'RFC !!!

Lo sto facendo ma è una paccata di roba
:eek:

cionci
05-10-2003, 10:44
Originariamente inviato da Luc@s
Lo sto facendo ma è una paccata di roba
:eek:
Chiaro che è una paccata...è la definizione ufficiale di un protocollo di comunicazione !!!

Luc@s
05-10-2003, 10:46
si ma il mio inglese non è il massimo quindi ici metto un po!

cionci
05-10-2003, 10:49
Certo, ma è uno sforzo che vale la conoscenza acquisita... Non posso certo leggerlo io per te ;)

Luc@s
05-10-2003, 10:51
hai ragione.
Cmq dopo che l'ho letto.................so come scambiare dati.
Ma come connettermi ad internet?????

P.S: ma sull'altro host ci dev'essere un server ftp???

Scusa per le mie stressanti domande

cionci
05-10-2003, 10:51
http://www.napolihak.it/pagine/rfc_it/rfc959_it.htm

Purtroppo è tradotta con un traduttore automatico...

Luc@s
05-10-2003, 10:54
Ste traduzioni nn sono il massimo.......ma se nn imparo l'inglese che informatico sono?
Cmq dopo che l'ho letto.................so come scambiare dati.
Ma come connettermi ad internet?????

P.S: ma sull'altro host ci dev'essere un server ftp???

Scusa per le mie stressanti domande

cionci
05-10-2003, 10:56
Dall'altra parte ci deve essere un server FTP !!! Direi !!!

Dopo averlo letto NON sai come trasmettere i comandi su internet...sai come funziona il protocollo FTP e basta...

Per trasmettere i comandi devi saper usare i socket !!!

Luc@s
05-10-2003, 11:00
Originariamente inviato da cionci
Dall'altra parte ci deve essere un server FTP !!! Direi !!!

Dopo averlo letto NON sai come trasmettere i comandi su internet...sai come funziona il protocollo FTP e basta...

Per trasmettere i comandi devi saper usare i socket !!!

e li che volevo arrivare:)
Mi sembra che i socket siano OS-dipendent: linux li vede come file mentre winzoz a i solito nomi di funzioni kilometrike:cry:
Come faccio a usare socket multi-os, se esistono?

cionci
05-10-2003, 11:02
I socket sono praticamente uguali sia su Linux che su Windows...

socket, bind, listen, accept, connect, send, recv, recvfrom, select, getsockopt, setsockopt...

Ci sono piccole differenze...

Luc@s
05-10-2003, 11:05
Originariamente inviato da cionci
I socket sono praticamente uguali sia su Linux che su Windows...

socket, bind, listen, accept, connect, send, recv, recvfrom, select, getsockopt, setsockopt...

Ci sono piccole differenze...

whow nn lo sapevo!
Ci sono RFC anche su essi???

Luc@s
05-10-2003, 11:09
mi sa che per la storia dei nomi chilometrici ho confuso i winsock(socket a + alto livello della M$) con i socket vero?

cionci
05-10-2003, 11:11
Originariamente inviato da Luc@s
Ci sono RFC anche su essi???
No...le RFC sono per i protocolli internet...

Per i socket in C ci sono le varie guide che trovi tramite un motore di ricerca...

http://telemat.die.unifi.it/book/1997/winsock_prg/wsk_idx.html

Le funzioni con WSA davanti non sono portabili...

cionci
05-10-2003, 11:13
Originariamente inviato da Luc@s
mi sa che per la storia dei nomi chilometrici ho confuso i winsock(socket a + alto livello della M$) con i socket vero?
No...anche quelle funzioni sono della libreria winsock2...
Per compatibilità però ti conviene usare quelle che ti ho detto !!!

Le funzioni con WSA davanti ti servono al massimo per inizializzare Winsock e per la gestione degli errori...

Luc@s
05-10-2003, 11:15
tnk di tutto cmq................

cionci
05-10-2003, 11:23
Di niente :)

Luc@s
05-10-2003, 11:24
sei un mostro da te imparo sempre.............ma come fai????
Cmq i socket sono a basso lvello se non ho capito male

cionci
05-10-2003, 11:25
Sono a basso livello...di API di più alto livello ce ne sono a bizzeffe...

Luc@s
05-10-2003, 11:26
Originariamente inviato da cionci
Sono a basso livello...di API di più alto livello ce ne sono a bizzeffe...

cioe byte a byte, no?
Ma quelle a + alto livello...............sono portabili???

P.S: ma tu dove hai imparato le socket?

cionci
05-10-2003, 12:45
Originariamente inviato da Luc@s
cioe byte a byte, no?
Che intendi ?
Originariamente inviato da Luc@s
Ma quelle a + alto livello...............sono portabili???
Assolutamente no !!!
Originariamente inviato da Luc@s
P.S: ma tu dove hai imparato le socket?
All'uni...

Luc@s
05-10-2003, 12:47
intendevo basso livello == byte x byte , se ho ben capito.
E che non trovo buone doc su come usare i socket.

P.S: poi c'è il problema GUI:cry:

cionci
05-10-2003, 12:54
Originariamente inviato da Luc@s
intendevo basso livello == byte x byte , se ho ben capito.
No...per basso livello in questo caso si intende che non ci sono livelli software intermedi fra il sistema operativo e quelle funzioni
Originariamente inviato da Luc@s
E che non trovo buone doc su come usare i socket.
http://www.google.it/search?sourceid=navclient&hl=it&ie=UTF-8&oe=UTF-8&q=tutorial+socket

Luc@s
05-10-2003, 12:58
ora vedo ste guide!
Cosa intendi con non ci sono livelli software intermedi???
Che le funz richiamano le primitive in ASM senza passare per l'OS?

cionci
05-10-2003, 13:00
No...che passa direttamente al SO senza livelli di software intermedi (in pratica non vengono chiamate altre API per realizzare quella chiamata)...

Luc@s
05-10-2003, 13:02
ah ok!