ministerul educației al republicii moldova

6

Click here to load reader

Upload: costraci-mihai

Post on 24-Nov-2015

9 views

Category:

Documents


0 download

TRANSCRIPT

Ministerul Educaiei al Republicii MoldovaUniversitatea Tehnic a MoldoveiFacultatea Calculatoare, Informatic i MicroelectronicCatedra Automatica i Tehnologii Informaionale

RaportDisciplina: Programarea n reea

Tema: UDP MulticastingLaboratorul nr. 4

A efectuat: studentul grupei TI-111 Mihail Costraci

A verificat: lector superior Dumitru Ciorb

Chiinu 2014Scopul lucrrii - Studiul protocolului UDP i a transmisiunii multicasting.Obiectivul lucrrii Crearea a dou aplicaii Sender i Receiver care s se poate intra ntr-un grup pentru a face schimb de pachete cu acetia.1 Protocolul UDP UDP (User Datagram Protocol) reprezint un protocol fr conexiuni, ceea ce semnific faptul c acesta nu garanteaz transmiterea pachetelor precum o face protocolul TCP, i chiar dac pare banal faptul c e ru s pierdem pachetele atunci cnd transmitem, UDP se dovedete a fi mult mai eficient dect TCP n reele apropiate, deoarece pachetele au puine anse a fi pierdute, i spre deosebire de TCP nu trebuie s fie ateptat un rspuns de confirmare. Deasemenea UDP se dovedete a fi mai eficient n transmiterea datelor unde se accept pierderea a ctorva pachete din totalul trimis, ca exemplu schimbul de sunet, video. Protocolul a fost implementat de David P. Reed n anul 1980 devenind unul din protocoalle principale de transmitere a datelor prin Internet.2 Multicasting Odat ce transmiterea unui pachet n internet se face prin direcionarea acestuia de ctre router i alte dispozitive de reea n dependen de IP-ul destinatarului, este evident c multicastingul necesit modificri asupra IP-ului. n primul rnd operaia de multicasting nsemn transmiterea datelor unui grup anumit de persoane dintr-o reea i poate fi realizat doar prin intermediul protocolului UDP, deoarece TCP ar trebui s menin conexiunile pn va primi o confirmare sau n caz i mai ru retrimiterea datelor ceea ce nu este deloc eficient. Pentru a specifica un IP de grup sunt folosite IP-uri din categoria D i anume 224.0.0.0 pin la 239.25.255.255.3 Realizarea lucrrii3.1 Descrierea aplicaiei Aplicaiile implementate pentru a satisface sarcina laboratorului reprezint aplicaii desktop Windows, folosind limbajul Objective-c i a primit denumirea de UDPMulticastSender i respectiv UDPMulticastReceiver. Prima aplicaie UDPMulticastSender nu face nimic altceva dect s trimit date ctre un group specificat prin IP i Port la apsarea butonului Save din interfaz. A doua aplicaie UDPMulticastReceiver permite introducerea n interfa a IP-ului grupului, ct i a portului, dup care apsnd start, aceasta va aduga toate mesajele primite n textBox-ul de mai jos.3.3 Aplicaia din interior Att pentru UDPMulticastSender ct i pentru UDPMulticastReceiver am folosit clasa GCDAsyncUdpSocket, oferit ca librrie third-party pentru lucrul asincron cu socket-urile setate pentru lucrul cu protocolul UDP. Folosirea acestei clase a permis evitarea lucrului direct cu socketuri de nivel jos, oferind funcii Delegate de primire a datelor i funcii simple de trimitere a datelor. n codul ce urmeaz poate fi vzut crearea socketului, n care se specific unde sunt implementate funciile delegate i n ce cuad de execuie:udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

Pentru transmiterea datelor nu avem nevoie dect de conversia acestora n bytes, iar apoi prin portul i adresa grupului primite n interfa, trimitem datele n grup cu ajutorul socketului UDP: NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];[udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:tag];

Pentru UDPMulticastReceiver se utilizeaz aceleai funcii plus cteva i anume funcia bindToPort pentru a asocia socketul cu portul specificat n interfa:[udpSocket bindToPort:port error:&error];

Deasemenea pentru a asculta mesajele transmise ntr-un grup trebuie s ne atam la grupul respectiv, ceea ce putem face cu funia joinMulticastGroup, ceea ce face socket-ul s asculte pe toate interfeele, o alt funcie este joinMulticastGroup:onInterface:Error:, dar nu o folosim fiindc n prima funcie implicit se ascult pe toate interfeele:[udpSocket joinMulticastGroup:[addressField stringValue] error:&error];

Pentru citirea datelor nu trebuie de fcut ceva de genul unui while loop precum n Java sau C#. Aici se ivete frumuseea din Objective-C i anume prin funciile Delegate, care se cheam atunci cnd se ntimpl un eveniment, n cazul nostru n situaia cnd un pachet apare, este chemat urmtoare funcie unde se prelucreaz datele:- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext{NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}

3.5 Exemple de utilizare a aplicaiei n figura 1 este reprezentat aplicaia UDPMulticastSender care trimite cteva mesaje ntr-un grup.

Figura 1 UDPMulticastSender trimite mesajul UDP MULTICASTING

Figura 2 prezint measjele primite de ctre aplicaia Receiver de la aplicaia Sender. Deasemenea ambele aplicaii au fost testate pe calculatoare diferite, ba chiar mai mult au fost testate n cuplu cu Sender i Receiver scris n limbajul C# i au lucrat fr probleme ceea ce era i de ateptat.

Figura 2 UDPMulticastReceiver primete i afieaz mesajele din grup

Concluzie Aplicaiile de trimitere a mesajelor n grup i de preluare a acestora a fost scris n grup. A fost testat n pereche cu aplicaii scrise n limbajul C# fapt care nu a mpiedicat lucrul eficient al aplicaiilor ceea ce era i de ateptat. n laboratoarele precedente nu s-a vzut toat puterea limbajului Objective-C, ns acum poate fi vzut prin folosireafunciilor Delegate pentru chemarea unei funcii de prelucrarea a datelor atunci cnd un pachet este trimis n grup. Este foarte eficient anume pentru c funcia care este invocat primete datele transmise, adresa grupului, portul grupului drept parametri ceea ce exclude utilizarea unui ciclu while pentru a atepta datele din grup.BIBLIOGRAFIE 1. TCP, UDP, Unicast, Multicast?, ali.mukadam, 2009, https://blogs.oracle.com/lmukadam/entry/tcp_udp_unicast_multicast_i_th

2