Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Transferarea Fisierelor Prin FTP

Informatica


Tinjeala Daniel

Clasa a XI-a B

Transferarea Fisierelor Prin FTP



File Transfer Protocol (FTP) este serviciul care da posibilitatea utilizatorilor de a transfera fisiere de la un calculator aflat in Internet, care se numeste remote host, pe calculatorul local. Situatiile in care poate fi folosit serviciul FTP sunt diverse: cand e nevoie de un program, de documentatie, si exista un host (gazda) pe Internet care-l pune la dispozitie; cand se doreste stocarea datelor pe un alt calculator decat cel propriu; cand se doreste schimbul de date cu un alt utilizator etc.
    Pentru a transfera un fisier de la un server FTP sau remote host, e nevoie de un program numit client FTP. Acestea sunt de doua tipuri: cu interfata grafica, sub Windows,OS2 etc, sau in mod text, cu linie de comanda, sub DOS, Unix etc. Clientii FTP cu interfata grafica usureaza munca, toate operatiile decurgand analog cu cele folosite pentru transferul de fisiere pe acelasi calculator, dintr-un director in altul.
    Clientii in mod text folosesc comenzi standard, gen DOS. Dupa ce se realizeaza conectarea la serverul dorit cu comanda open nume_server (ex: open ftp.microsoft.com), serverul va raspunde cu un mesaj de identificare ce contine denumirea si tipul sistemului de operare pe care ruleaza. Apoi serverul cere clientului sa introduca un nume de utilizator (user) si o parola. Daca serverul este unul public va permite accesul folosind ca nume de utilizator anonymous iar ca parola adresa de posta electronica. In continuare se vor folosi comenzi asemanatoare cu cele DOS sau Unix, depinzand de sistemul de operare al serverului. Pentru a afla detalii legate de o comanda, se 929w2220j tasteaza in cadrul aplicatiei FTP help si apoi help comanda, unde comanda este comanda despre care se doresc informatii.

Protocolul FTP utilizeaza doua canale de comunicatie pentru a-si īndeplini obiectivul: un canal de control pentru transmiterea comenzilor si un canal de date pentru transmiterea fisierelor. Daca īn cazul canalului de control lucrurile decurg ca si īn cazul aplicatiilor proiectate pīna īn prezent īn cadrul seriei, coordonarea transmisiilor pe canalul de date decurge putin diferit fata de cum ne-am obisnuit pīna acum.

Chiar daca am mai spus aceste lucruri si īn articolul anterior voi aminti faptul ca pentru stabilirea conexiunii de control, clientul FTP creeaza un soclu pe care īl va conecta la portul 21 (bine cunoscut) al serverului FTP. Pentru stabilirea canalului de date clientul FTP va actiona ca un "server". Īn momentul īn care clientul FTP doreste sa transfere un fisier de pe situl unde ruleaza programul server atunci el creeaza un soclu pe care īl pune īn asteptare. Practic vorbind, clientul asteapta un semnal de la serverul FTP privind faptul ca acesta este gata sa īnceapa transmisia. Acest semnal din partea serverului soseste prin emiterea unei cereri de conexiune la portul la care asculta clientul (port liber, indicat īn prealabil de client).

Comenzi FTP

Īnainte de a trece mai departe pentru a studia modul īn care se proiecteaza aplicatia noastra vom mai zabovi putin pentru studiul cītorva comenzi, absolut necesare, ale protocolului FTP. Comenzile FTP se pot īncadra īn trei categorii: comenzi pentru control si acces, comenzi pentru pozitionarea parametrilor de transfer si comenzi pentru apelul unor servicii.

Despre trei dintre comenzile de control si acces am discutat īn articolul anterior: USER - pentru identificarea utilizatorului, PASS - pentru transmiterea parolei si QUIT pentru īncheierea unei sesiuni de lucru FTP. Din aceeasi categorie mai fac parte comenzile care ne permit schimbarea directorului curent. Ca si alte calculatoare, cele pe care ruleaza serverul FTP stocheaza fisierele īn subdirectoare. Pentru gasirea fisierului dorit este normal ca utilizatorii sa navigheze prin structura de directoare. Comanda CWD (Change Working Directory) permite utilizatorului sa se mute īn alt director. Aceasta comanda necesita un argument ce reprezinta calea catre respectivul director. Īn acelasi scop, navigarea prin structura de directoare, exista o comanda speciala care permite trecerea la directorul de nivel superior - CDUP (change to parent directory). Comanda CDUP are ca scop simplificarea tehnologiei de implementare a programelor care transfera īntregul arbore de directoare īntre sisteme de operare care utilizeaza sintaxe diferite pentru reprezentarea directoarelor parinte.

Comenzile pentru definirea parametrilor de transfer permit utilizatorilor sa specifice tipurile fisierelor, formatele si structurile fisierelor precum si modurile de transmisie. Toti parametrii procesului de transmisie a datelor au valori implicite. Cu alte cuvinte aceste comenzi vor fi utilizate doar īn cazul īn care clientul doreste sa schimbe valoarea unui anumit parametru. Comenzile pot fi transmise īn orice ordine.

Una dintre cele mai importante comenzi este PORT. Prin intermediul acestei comenzi, clientul informeaza serverul la ce port sa īncerce conectarea. Aici facem referire la faptul ca pentru fiecare operatie de transfer clientul si serverul trebuie sa stabileasca o noua conexiune TCP. Conectarea nu are loc la un port bine cunoscut pentru FTP. Pentru a specifica adresa portului clientul utilizeaza comanda PORT. Argumentul comenzii PORT este o combinatie īntre un numar pe 32 de biti reprezentīnd o adresa a unui calculator pe Internet si un numar pe 16 biti reprezentīnd adresa TCP a unui port. Clientul trebuie sa "sparga" aceste adrese īn cīmpuri de cīte 8 biti si sa transmita fiecare valoare īn parte, valorile fiind separate īntre ele prin virgula. Sa presupunem ca programul client ruleaza pe un sistem avīnd adresa IP 193.226.123.60 (bryan.agora.ro) si folosim portul 1150 (0x047E). Īn acest caz programul nostru ar trebui sa lanseze comanda PORT cu urmatorii parametri:

PORT 193,226,123,60,4,126

Pentru definirea tipului fisierului exista comanda TYPE. FTP recunoaste patru tipuri de fisiere: ASCII, EBCDIC, Binar (sau de tip imagine) si Local (cīnd octetul nu este reprezentat pe 8 biti). Pentru fisierele de tip ASCII si EBCDIC utilizatorul poate specifica trei formate de control: ne-tiparibile, TELNET si FORTRAN. Tipurile fisierelor si formatele de control se simbolizeaza cu ajutorul unui caracter. Pentru fisierele de tip ASCII se utilizeaza simbolul A. Daca dorim sa transferam un fisier de tip ASCII folosind formatul de control TELNET atunci parametrul comenzii TYPE va fi AT. Īn mod similar, atunci cīnd dorim sa specificam ca tipul fisierului ca fiind binar vom folosi parametrul I.

Modul de transfer al fisierului poate fi specificat cu ajutorul comenzii MODE. Ca si comanda anterioara, MODE necesita un singur caracter ca parametru. Se va utiliza simbolul S pentru transmisia de tip stream, B pentru transmisia de tip bloc, C pentru transmisia fisierului folosind un algoritm de compresie.

Comenzile pentru apelul serviciilor FTP specifica operatiile de transfer pe care doreste sa le execute utilizatorul. Dupa cum era de asteptat aceasta categorie cuprinde cel mai mare numar de comenzi definite de protocolul FTP. Īn raspuns la o comanda din aceasta categorie, serverul raspunde printr-un transfer de date.

Comanda RETR (retrieve) este utilizata de client pentru a cere serverului sa transfere un fisier. Cu alte cuvinte, comanda RETR transfera un fisier de pe un calculator aflat la distanta pe sistemul local. Comanda STOR permite utilizatorului sa transfere un fisier de pe sistemul local pe sistemul aflat la distanta. Daca fisierul care se doreste a fi transferat (transmis ca parametru al comenzii STOR) exista pe sistemul pe care ruleaza serverul atunci el va fi suprascris.

Pe masura ce utilizatorul navigheaza prin structura de directoare a sistemului aflat la distanta, el are nevoie de informatii privind continutul acestor directoare. Cu alte cuvinte, la schimbarea directorului curent clientul va trebui sa initieze comanda LIST. Aceasta comanda (fara nuci un argument) face ca serverul sa transmita lista fisierelor si a subdirectoarelor continute īn directorul curent. Īn cazul īn care argumentul comenzii reprezinta o anumita cale serverul va transmite lista fisierelor existente īn respectivul director. Transferul datelor referitoare la continutul directoarelor va fi de tip ASCII sau EBCDIC (altfel spus utilizatorul trebuie sa se asigure ca tipul este setat corect pe ASCII sau EBCDIC). O comanda identica cu LIST este Name LIST (NLST).

Este posibil ca prin schimbarea directoarelor pe sistemul aflat la distanta utilizatorul sa uite care este numele directorului curent. Comanda PWD cere serverului FTP sa transmita denumirea directorului curent. Aceasta comanda este mult mai folositoare celor care lucreaza cu programe Ftp īn regim linie de comanda (programele Windows mentin afisat pe ecran numele directorului curent).

Una dintre cele mai importante comenzi ce fac parte din protocolul FTP este comanda ABOR. Practic, aceasta comanda permite utilizatorului sa abandoneze o operatie de transfer īnainte ca aceasta sa se termine. ABOR cere serverului sa abandoneze actiunea initiata de comanda precedenta si orice operatie de transfer asociata. Bineīnteles ca serverul nu va initia abandonarea īn cazul īn care operatia de transfer anterioara comenzii ABOR s-a terminat. Altfel serverul va īnchide canalul de date, canalul de control ramīnīnd deschis īn continuare.

Fara a mai recurge la descrierea comenzilor voi aminti īn continuare cīteva dintre comenzile FTP pe care nu le-am prezentat īnca: DELE pentru stergerea fisierelor aflate pe sistemul pe care ruleaza serverul; MKD (make directory) pentru crearea unui director pe sistemul aflat la distanta; RMD (remove directory) pentru stergerea unui director pe sistemul aflat la distanta; SYST pentru determinarea tipului sistemului de operare folosit pe sistemul aflat la distanta; STAT pentru cazul īn care utilizatorul doreste sa afle starea īn care se afla procesul de transfer sau starea īn care se afla serverul īn general; pentru utilizatorii care doresc sa-si aduca aminte sintaxa unei comenzi exista comanda HELP; NOOP (no operation) este o comanda folosita pentru testarea conexiunii cu serverul FTP.

Replici FTP

Protocolul FTP lucreaza pas cu pas. Altfel spus, sa presupunem ca a fost trimisa o comanda de catre client. El nu continua (nu mai emite alta comanda) pīna cīnd nu primeste un raspuns din partea serverului referitor la comanda initiata: comanda este corecta, comanda nu este cunoscuta de server, comanda este gresita sintactic etc. Dupa ce primeste raspunsul de la server, clientul poate sa-si continue munca. Īn cadrul acestui paragraf al articolului ne vom ocupa de modul īn care trebuie interpretate raspunsurile serverului, raspunsuri numite replici.

Fiecare replica FTP are un anumit cod. Fiecare cifra a codului are o semnificatie speciala. Codurile FTP fiind formate din trei cifre, prima cifra indica o informatie de ordin general pe care urmatoarele cifre ale codului vin sa o rafineze.

De exemplu, īn cazul īn care prima cifra a codului replicii este 2 īnseamna ca serverul a reusit executarea comenzii. La fel, daca prima cifra este 5 acest lucru īnseamna ca serverul nu accepta comanda transmisa de server si deci nu se initiaza nici o actiune. Acum, indiferent de valoarea primei cifre a codului, daca cea de-a doua cifra este 2 atunci īnseamna ca respectivele replici se refera la canalul de date sau la canalul de control. Daca cea de-a doua cifra este 0 atunci replicile respective se refera la erori sintactice. Īn cadrul tabelului 1 am prezentat semnificatia replicilor folosite mai des.

Clientul FTP

Acum dispunem de toate datele de care avem nevoie pentru a putea proiecta un client FTP real. De data aceasta vom apela din plin la modelul de programare Windows. Mai mult decīt atīt, ne vom ocupa si de conceperea unor resurse acoperitoare pentru nevoile aplicatiei noastre. Daca īn numarul trecut al revistei ne-am ocupat doar de initierea canalului de control acum vom vedea cum se poate realiza si coordona canalul de date.

Pentru a putea lucra cīt mai eficient programul nostru va fi īmpartit pe module: modulul "Cdate.cpp" va contine functiile pentru coordonarea canalului de date, modulul "Ccontrol.cpp" va contine functiile pentru coordonarea canalului de control, modulul "Ftpman.cpp" fiind cel care va contine functiile principale. Īn plus mai avem doua fisiere header numite "global.h" (care contine declaratiile variabilelor globale ale programului) si "ftpman.h" (care contine prototipurile functiilor si constantele simbolice). Ca resurse ale programului vom dispune de o cutie de dialog prin care preluam datele de la utilizator, un meniu cu trei optiuni si un icon al aplicatiei.

Din punct de vedere al utilizatorului aplicatia este gīndita mai mult ca un demo. Odata ce aplicatia a fost lansata īn executie, utilizatorul va trebui sa furnizeze adresa sitului FTP la care doreste sa se conecteze - prin intermediul optiunii Conectare / FTP Login. Mai bine zis, la alegerea respectivei optiuni a meniului pe ecran va apare o cutie de dialog care prezinta trei cīmpuri: adresa Ftp (sub forma zecimala 193.226.123.17 sau sub forma unui nume NIC.DDN.MIL); nume utilizator (de obicei anonymous) si parola (īn cazul ftp anonymous parola este reprezentata de adresa de e-mail). Daca totul a decurs cu bine atunci pe ecran va apare un mesaj din partea serverului referitor la faptul ca este pregatit sa primeasca comenzi din partea clientului.

Īn continuare, folosind optiunile submeniului "Comenzi", utilizatorul poate initia cīteva dintre comenzile protocolului FTP: afisarea continutului directorului curent, schimbarea directorului curent, transferul unui fisier precum si abandonarea transferului, īnchiderea conexiunii.

Deschiderea canalului de control

Reīntorcīndu-ne la prezentarea programului din perspectiva programatorului vom discuta īntīi despre cīteva functii referitoare la canalul de control. Pentru deschiderea acestui canal avem functia ConectareSocluControlFTP. Aceasta functie rezolva īn primul rīnd numele hostului folosind functia gethostbyname sau functia gethostbyaddr. Utilizarea uneia sau alteia dintre functii se face īn functie de ceea ce introduce utilizatorul: numele sistemului sau adresa zecimala. Īn continuare, functia creeaza un soclu cu ajutorul functiei socket. Pentru a conecta soclul la portul corect functia ConectareSocluControlFTP utilizeaza īn prealabil getservbyname. Apoi construim adresa soclului prin completarea cīmpurilor structurii. Īn final conectam soclul la portul binecunoscut al sistemului aflat la distanta cu ajutorul functiei connect. FTP fiind un protocol care impune lucrul pas cu pas este necesar ca imediat ce emitem o cerere de conectare sa citim replica serverului. Īn acest scop utilizam functia CitesteReplicaServerFTP. Daca replica serverului are codul mai mare decīt 400 atunci īnseamna ca a aparut o eroare. Īn cazul īn care codul replicii serverului semnifica succes, functia ConectareSocluControlFTP īntoarce handle-ul soclului aflat la baza canalului de control.

Username : Nydaz ||| Password : ******* ||| Home Page : https://nydaz.cjb.net


Document Info


Accesari: 3310
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )