Sunteți pe pagina 1din 5

Lucrarea 6 Protocoale de comunicatie

1. Introducere
O retea de calculatoare este alcatuita dintr-un ansamblu de mijloace de transmisie si de sisteme de calcul, pentru a realiza atat functii de transport a informatiei cat si functii de prelucrare a acesteia. O retea de calculatoare care interconecteaza diferite sisteme de calcul poate functiona in bune conditii numai daca exista o conventie care stabileste modul in care se transmite si se interpreteaza informatia, conventie numita protocol. Un exemplu ar fi modul de comunicare intre doi filozofi.

Filozof 1

Filozof 2

Fig. 14. comunicaie ]ntre filoyofi . Doi filozofi, din tari diferite doresc sa faca schimb de idei. Din pacate, sunt departe unul de celalalt si nici nu au o limba comuna prin care sa comunice.Pentru a putea sa comunice trebuie sa foloseasca suport de comunicatie. Pentru a putea comunica, fiecare filozof angajeaza cate un traducator care sa cunoasca ambele limbi, iar ei la randul lor angajeaza cate o secretara care se va ocupa cu transmiterea efectiva a mesajului.

Urmarind figura, se observa ca filozoful 1 trimite translatorului sau mesajul pe care doreste sa-l primeasca filozoful 2. Acesta il traduce si il inmaneaza secretarei care il transmite mai departe prin fax, posta electronica sau telefonic secretarei 2. In concluzie un protocol este un set de reguli si conventii ce se stabilesc intre participantii (de exemplu, filozof 1- filozof 2) la o comunicatie in vederea asigurarii bunei desfasurari a comunicatiei respective; sau protocolul este o intelegere intre partile care comunica asupra modului de realizare a comunicarii.

2. Definirea unui protocol


2.1. Cerinte Se doreste implementarea unui pachet de programe pentru chat in retea. Pachetul va contine doua aplicatii, una de tip client si una de tip server. Mesajele schimbate de cele doua aplicatii pot fi de mai multe tipuri (mesaje de tip text mesaje clasice, mesaje de control etc.). De asemenea fiecare utilizator care foloseste aplicatia client are un nume care trbuie trimis la server atunci cand se trimite un mesaj de tip text.

2.2. Formatul mesajelor Pe baza cerintelor de mai sus se stabileste urmatoarea structura a mesajelor: fiecare mesaj este compus dintr-un header de dimensiune fixa (3 bytes) si un pachet de date de dimensiune variabila (0 250 bytes) header-ul are urmatoarea structura: |_______Tip_______|_Dimensiune nume_|_Dimensiune text_| |<----1 Byte----->|<----1 Byte----->| Byte----->|<----1

unde: campul tip contine tipul mesajului. Valori acceptate:

mesaj de tip text Mesajele de tip text contin numele utilizatorului precum si textul trimis de acesta o 1 mesaj de control Mesajele de control sunt mesajele trimise de client in momentul conectarii la server. campul Dimensiune nume contine dimensiunea in bytes (caractere) a numelui utilizatorului care a generat acest mesaj. Numele propriu-zis se va afla in pachetul de date incepand de la adresa 0 a acestuia pana la adresa Dimensiune nume 1. Dimensiunea maxima este 50 de octeti; campul Dimensiune text contine dimensiunea in bytes (caractere) a textului trimis prin intermediul acestui mesaj. Textul propriu-zis se va afla in pachetul de date incepand de la adresa Dimensiune nume a acestuia pana la adresa Dimensiune nume + Dimensiune text 1; Dimensiunea maxima este de 200 de octeti;

o 0

Exemplu mesaj de tip text: Se considera ca utilizatorul cu nume Ion vrea sa trimita textul Mesaj. Pachetul trimis in retea va avea urmatoarea structura: | |_0_|_3_|_5_|_I_|_o_|_n_|_M_|_e_|_s_|_a_|_j_| | | | Header Date Exemplu mesaj de control: Se considera ca utilizatorul cu nume Ion s-a conectat la server. El va trimite imediat dupa stabilirea conexiunii un mesaj de identificare cu urmatoarea structura: | |_1_|_3_|_0 |_I_|_o_|_n_| | | |

Conform acestui protocol se garanteaza urmatoarele: dimensiunea minima a pachetelor este de 3 bytes (numai headerul)

dimensiunea maxima a pachetelor este de 253 bytes (headerul + dimensiunea maxima a sectiunii de date

3. Cerinte laborator
1. Se da urmatoarea definitie a unei clase C++:
public CMyMessage { protected: BYTE tip; BYTE textlen; BYTE namelen; char* text; char* name; public: //parseaza datele din bufferul 'message' si va scrie valorile obtinute //in variailele clasei //ATENTIE: aici se aloca DINAMIC memorie pentru //variabila 'text' (textlen+1 bytes) si variabila 'name' (namelen+1 bytes) CMyMessage(BYTE* message); //scrie valorile in variailele clasei //ATENTIE: aici se aloca DINAMIC memorie pentru //variabila 'text' (textlen+1 bytes) si variabila 'name' (namelen+1 bytes) CMyMessage(BYTE tip, char* name, BYTE namelen, char* text, BYTE textlen); //dealoca memoria pentru variabilele 'text' si 'name' //(ATENTIE: se dealoca un array si nu o simpla variabila!!!!!) virtual ~CMyMessage(); //combina valorile variabilelor si scrie intrun buffer //pachetul de date care va fi trimis in retea conform protocolului //ATENTIE: bufferul este deja alocat sub forma unui BYTE array //de 256 de bytes //in variabila length se va scrie numarul de BYTES utili scrisi //in bufferul message void GetMessageAsByteStream(BYTE* message, int* length);

char* GetMyMsgText() {return this->text;} char* GetMyMsgName() {return this->name;} BYTE GetMyMsgType() {return this->tip;} }

Scrieti definitia acestei clase. 2. Realizati o aplicatie client folosind socket stream. Dupa pornirea aplicatiei se va solicita un nume de utilizator, apoi se va realiza conexiunea la server si se va trimite numele de utilizator folosind un mesaj de control (tip = 1). In continuare clientul asteapta intr-o bucla infinita introducerea unui text de la tastatura si trimite acest text catre server prin intermediul unui mesaj de tip text (tip = 0) si apoi asteapta raspunsul serverului (tot sub forma unui mesaj de tip text) si afiseaza textul pe ecran; 3. Realizati o aplicatie server folosind socket stream. Serverul permite conectarea mai multor clienti. Dupa ce s-a realizat conexiunea cu un client, serverul asteapta de la acesta un mesaj de control (tip = 1) care sa contina numele de identificare al clientului. Serverul va afisa pe ecran acest nume si apoi asteapta intr-o bucla infinita primitea de mesaje de tip text (tip = 0). Atunci cand un mesaj de tip text a fost primit, textul va fi afisat pe ecran iar serverul va trimite catre client un mesaj de tip text cu urmatoarea structura: Tip -> 0 Nume -> Server (numelen = 6) Text -> Mesaj primit (textlen = 12)

S-ar putea să vă placă și