Documente online.
Username / Parola inexistente
  Zona de administrare documente. Fisierele tale  
Am uitat parola x Creaza cont nou
  Home Exploreaza
Upload




























Client Chat, Cautare hosturi, Transfer de fisiere

Informatica




Client Chat, Cautare hosturi, Transfer de fisiere

5.1 Introducere

Aplicatia care va fi prezentata īn continuare reprezinta un client chat, dar īn acelasi timp poate cauta calculatoarele active dintr-o retea si poate face transfer de fisiere.




Scopul acestei aplicatii este acela de a demonstra conexiunea īntre 2 dispozitive (īn cazul nostru calculatoare) aflate īntr-o retea fara fir (wireless).

Mijloacele utilizate īn laborator pentru demontratie sunt:

un notebook Acer TravelMate 4050, procesor Intel Pentium M 1,5 Ghz, echipat cu o placa de retea fara fir Intel(R) PRO/Wireless 2200BG, compatibila, asa cum īi spune si numele, atāt cu standardul 802.11b, cāt si cu 802.11g.

Un PC obisnuit echipat cu o placa de retea wireless PCI 802.11b, produsa de firma MSI.

Se va configura o retea de tip ad-hoc cu ajutorul careia se va realiza comunicatia īntre cele doua calculatoare; folosim acest tip de retea deoarece nu avem la dispozitie un AP.

Reteaua va primi un nume (SSID): George Butuc; vom avea de ales daca folosim WEP sau nu, daca aceasta cheie este alocata automat sau 222s189c introdusa de noi.

Aplicatia va fi instalata pe ambele calculatoare si se vor testa, pe rānd, optiunile de cautare de hosturi, chat, transfer de fisiere.

5.2 Descrierea aplicatiei

Aceasta aplicatie foloseste modelul client-server, cu toate ca reprezinta un singur executabil. Pentru a se realiza conexiunea īntre cele doua entitati, se folosesc socket-i. Un socket   reprezinta un canal generalizat de comunicare īntre procese. El ofera posibilitatea de comunicare īntre procese aflate pe hosturi diferite īntr-o retea.

Īn momentul īn care se doreste crearea unui socket, trebuie specificate atāt stilul de comunicatie care va fi folosit, cāt si tipul de protocol care īl implementeaza.

Socket-ii folositi sunt de tip TCP (Transport Control Protocol). Acest protocol furnizeaza un flux sigur de date īntre 2 calculatoare; de asemenea se asigura stabilirea unei conexiuni permanente īntre cele 2 calculatoare pe parcursul comunicatiei (RFC 793).

Mesajele scrise sunt transmise pe portul 6000, iar transferul de fisiere se face folosind portul 7000.

Respectānd modelul client-server, aplicatia poate rula īn modul SERVER, atunci cānd asteapta conexiunea, īnsa de asemenea se poate comporta ca un CLIENT, fiind cel care va initia conexiunea.

Īn vederea transmiterii si receptionarii de mesaje, dar si a transferului de fisiere, atāt pentru partea de client cāt si pentru partea de server, sunt folosite thread-uri separate (sau fire de executie).

Un fir de executie reprezinta o modalitate software de īmbunatatire a performantelor de calcul prin reducerea costului de comutare a proceselor. Fiecare thread reprezinta un flux separat de executie si este caracterizat prin propria sa stiva si stare hardware (registre, flag-uri).

Īn cazul īn care aplicatia intra īn modul SERVER se va lansa thread2. acest thread asteapta si accepta conexiuni de pe portul bindat 6000, apoi va lansa o bucla īn care sunt primite mesajele de la client. Lansarea acestui thread se efectueaza īn momentul cānd se executa click pe butonul Asteptare conexiune.

Trecānd acum īn partea cealalta, a CLIENTULUI, īn momentul īn care se va executa click pe butonul Conectare, aplicatia va lansa threadul numit thread. Acesta se va conecta la adresa IP destinatie folosind portul 6000, port pe care asculta serverul. Dupa ce se realizeaza conexiunea, se intra de asemenea īntr-o bucla de receptionare a mesajelor.

Īn cazul unei erori la conectare, ambele threaduri (atāt thread cāt si thread2) vor afisa mesajul Conexiune īncheiata si se vor īnchide.

Īnainte de a se intra īn bucla pentru receptionarea mesajelor, se va calcula viteza aproximativa a conexiunii. Acest lucru se realizeaza prin transferul unui buffer de 100 kbytes si masurarea timpului necesar pentru acest transfer; timpul final necesar transferului acestui buffer se calculeaza īn momentul primirii unui mesaj de confirmare de la server. Īn cazul de fata, acest mesaj de confirmare este reprezentat de primirea caracterului "K".

Īn cazul īn care se va realiza conexiunea cu succes, aplicatia va lansa de asemenea threadul numit thread3; acest thread va asculta pe portul 7000 si va astepta un eventual transfer de fisiere.



Din momentul īn care se accepta o conexiune īn vederea transferului unui fisier, sunt parcurse mai multe etape:

Prima data se va receptiona marimea numelui fisierului care urmeaza sa fie transferat;

Se primeste numele fisierului;

Se activeaza dialogul prin care se va specifica directorul īn care va fi salvat fisierul;

Se primeste marimea fisierului;

Se face transferul propriu-zis al fisierului īn pachete de cāte 1 KB.

Transferul de fisiere va porni numai dupa ce se va afisa dialogul care indica progresul transferului fisierului; acest dialog este activat īntr-un thread separat numit thread4. Aceasta implementare, de a actualiza informatiile din dialogul de transfer īntr-un thread separat fata de cel care activeaza dialogul, a fost aleasa pentru a nu se bloca interfata grafica, cāt timp dureaza transferul fisierului.

Īn momentul īn care se doreste transferul unui fisier, se executa click pe butonul Trimite fisier. Īn acest moment se creeaza un socket care se va conecta la adresa IP destinatie pe portul 7000; se activeaza dialogul īn care se va specifica fisierul care urmeaza a fi transferat; dupa ce se va selecta fisierul, sunt urmate urmatoarele etape:

Se deschide dialogul prin care se va selecta fisierul care va fi trimis;

Se va trimite marimea numeleui fisierului care urmeaza a fi transferat;

Se trimite numele fisierului;

Se trimite marimea fisierului;

Se face transferul propriu-zis al fisierului īn pachete de cāte 1 KB.

Adresa IP la care se va conecta clientul poate fi introdusa manual īn caseta de text rezervata pentru acest lucru; daca totusi nu se doreste introducerea manuala a adresei IP, se poate scana reteaua dupa hosturile active prin apasarea butonului Scanare. Aceasta functie se bazeaza pe clasa CPING, ce permite trimiterea de pachete ICMP catre un calculator si receptia pachetului de raspuns, īn cazul īn care acel calculator este activ. Astfel se poate realiza o lista cu toate calculatoarele active dintr-o retea, lista sub forma unui combo-box. Din aceasta lista se poate selecta adresa IP cu care se va realiya conexiunea.

Trimiterea pachetelor ICMP este realizata prin crearea unui socket de tip SOCKET_RAW; acest tip de socket permite folosirea protocoalelor de comunicatie la nivelul IP (ICMP, UDP,TCP etc).

Interfata grafica a fost realizata folosind, in cazul butoanelor, o clasa personalizata ce permite afisarea acestora īntr-un mod ce poate fi configurat; se pot astfel afisa butoanele plate, se poate asocia fiecarui buton un icon sau un bitmap, se pot specifica culorile de background atāt timp cāt pointerul mausului este īn interior sau īn afara butoanelor; se poate alege o culoare transparenta a butoanelor, etc; aceasta clasa are suport si pentru controale de tip checkbox (vezi butonul asteapta conexiune).

Īn clasa FileTransferDlg se trateaza mesajul WM_INITDIALOG in functia OnInitDialog(). Īn aceasta functie variabila begindownload ia valoarea 1 pentru a semnala threadului thread3 ca dialogul ce indica progresul transferului de fisier a fost afisat si se pot actualiza informatiile de pe el cu privire la transferul de fisiere.



Clasa FilePickCtrl contine implementarea controlului ce este folosit la selectarea fisierului ce urmeaza a fi transferat, cat si a directorului destinatie in care va fi salvat. In cazul in care se doreste doar selectia unui director, se apeleaza functia pusa la dispozitie de acest control SetDirOnly(), cu parametrul valoarea booleana TRUE.

5.3 Modul de functionare

5.3.1Cautarea hosturilor active din retea

Pentru a putea comunica cu un alt calculator, aplicatia are nevoie de o adresa IP la care sa se conecteze; prin apasarea butonului Scanare, vor fi cautate īn retea hosturile active, iar cu aceste hosturi se populeaza o lista (aceasta lista se populeaza cu adresele IP). Figura 5.1 ne arata cum putem cauta hosturile si unde se afla ele.


Dupa ce operatia de scanare este terminata, putem alege adresa IP cu are dorim sa comunicam; acest lucru se poate face īn 2 moduri:

introducem manual adresa IP īn cāmpul destinat;

selectam adresa din cāmpul de adrese obtinut īn urma īn urma activarii functiei de cautare.

Oricare din aceste doua variante se poate folosi fara probleme.

5.3.2 Conectarea

Dupa ce caseta pentru adresa IP a hostului la care ne dorim conectarea a fost populata cu un IP, putem apasa butonul Conectare. Dupa ce conexiunea este realizata cu celalalt host, se va afisa mesajul de Conexiune realizata, precum si viteza conexiunii, asa cum se vede si īn figura 5.2.


De retinut ca hostul la care ne vom conecta trebuie sa aiba aplicatia pornita īn modul Asteptare conexiune, pentru a putea accepta o conexiune.

Viteza conexiunii este relativa, fiind calculata cu ajutorul unui buffer de 100 KB, trimis de sursa catre destinatie, si calculāndu-se timpul īn care a fost receptionat.

Dupa ce este realizata conexiunea, butonul Conectare se transforma īn butonul Deconectare, dupa cum se observa si īn figura 5.2. Deconectarea nu se poate realiza decāt de cel care a initiat conexiunea; daca se doreste deconetarea de catre destinatie, singura posibilitate este de a īnchide aplicatia.

5.3.3 Transmitere/receptionare de mesaje

Mesajele se vor scrie īn spatiul rezervat; dupa ce textul este scris, pentru a-l putea transmite, se apasa fie butonul Trimite, fie tasta Enter; se poate folosi fara probleme oricare dintre variante.

Mesajele primite sunt vizualizate din acelasi loc ca si cele trimise, se pastreaza un istoric al mesajelor, pāna la īnchiderea aplicatiei.


5.3.4 Transmitere/receptionare de fisiere

Dupa cum spuneam si la īncepul acestei prezentari, aceasta aplicatie poate face si transfer de fisiere. Transferul de fisiere se poate realiza prin apasarea butonului Trimite fisier. Se va deschide o fereastra īn care va trebui sa selectam fisierul pe care dorim sa īl trimitem.

Directorul Up one directory urca un nivel īn arborele cu directoare, mergānd īn directorul parinte al directorului curent. Dupa ce se va selecta fisierul dorit, se actioneaza butonul Ok.


La receptie, dupa ce sursa va apasa butonul Ok, destinatia va putea alege, cu ajutorul unei casete de dialog asemanatoare cu cea folosita pentru selectarea fitierului ce se doreste a fi trimis, locul unde fisierul va fi salvat.

Dupa ce se selecteaza locul īn care va fi salvat fisierul, īncepe transferul propriu-zis, afisāndu-se si viteza de transfer instantanee (vezi figura 5.5). Dupa ce transferul este realizat, se actioneaza butonul Ok al ferestrei de transfer.











Document Info


Accesari: 1948
Apreciat:

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

Copiaza codul
in pagina web a site-ului tau.




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

Politica de confidentialitate




Copyright © Contact (SCRIGROUP Int. 2021 )