Sunteți pe pagina 1din 7

Ministerul Educației, Culturii și Cercetării Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
la Lucrarea de Laborator Nr. 5
Programarea în Rețea
TEMA: Aplicație Client-Server UDP.

A elaborat: st. gr. TI-172, Adasanu Gicu


A verificat: asistent universitar, Buldumac Oleg

Chișinău 2020
Sarcina lucrării:
Să se creeze o aplicație Client-Server UDP utilizând Sockets API.
Mersul lucrării:

Pentru efectuarea aceste lucrări de laborator vom crea o aplicație server care va face un stream
către client utilizînd protocolul UDP.
Inițial vom icrea un DatagramSocket.

Fig 1. Creare unui DatagramSocket.

Fig 2. Metoda pentru pornirea stream-ului.


Fig. 4. Crearea unui thread care va caputura monitorul si va trimite catre clienti imaginea.

Fig. 5. Metoda care permite capturarea monitorului.

Fig 6. Metoda care permite transmiterea byte-lor prin stream.


Din partea clientului vom initia un DatagramSocket si vom timi un mesaj connect pentru a primi
acces la stream-ul de pe server.

Fig 7. Cererea spre server.

Fig. 8. Adaugarea clientului noi si transmiterea byte-lor spre el.

Din partea clientului vom crea un thread care va primi pachetele de catre server.

Fig 9. Thread-ul pentru primirea pachetelor din partea serverului.

Testare:
Fig 10. Initializarea stream-ului catre server.

Fig 11. Rularea aplicatiei pentru client.

Fig 12. Accesarea stream-ului.

 Ce este un protocol orientat către tranzacții, fără conexiune?


UDP(Protocolul Datagramelor Utilizator) constituie modul de comunicație fără conexiune. Este
similar cu sistemul poștal, în sensul că pachetele de informații (corespondența) sunt trimise în general fără
confirmare de primire, în speranța că ele vor ajunge, fără a exista o legătură efectivă între expeditor și
destinatar.
 Ce tipuri de aplicații beneficiază în general de utilizarea protocolului UDP?
UDP are o serie de avantaje pentru diferite tipuri de aplicații, inclusiv:
 Fără întârzieri de retransmisie - UDP este potrivit pentru aplicațiile sensibile la timp care nu își
pot permite întârzieri de retransmisie pentru pachetele abandonate. Exemple includ Voice over IP (VoIP),
jocuri online și streaming media.
 Viteză - viteza UDP îl face util pentru protocoalele de răspuns la interogare, cum ar fi DNS, în
care pachetele de date sunt mici și tranzacționale.
 Potrivit pentru emisiuni - Lipsa de comunicare end-to-end a UDP o face potrivită pentru
emisiuni, în care pachetele de date transmise sunt adresate ca primite de toate dispozitivele de pe internet.
Emisiile UDP pot fi primite de un număr mare de clienți, fără a depăși serverul.
 De ce protocolul UDP nu garantează că datele vor fi transmise cu succes?
UDP face parte din categoria protocoalelor de transport nesigure. În acest caz nu este garantată
ajungerea unor date corecte la destinatie pentru că nu este obligatorie folosirea unor sume de control (la
acest nivel de protocol). Utilizarea protocoalelor nesigure se face deoarece costul este mai mic decât în
cazul protocoalelor sigure. Practic vorbind, un protocol nesigur este mult mai simplu de proiectat, de
implementat si apoi de folosit. Costul, în termeni de complexitate (verificarea erorilor, calculul sumelor
de control etc.) si lărgime de bandă (bandwidth), sunt în mod simtitor mai mici cu un protocol nesigur.
 Diferența dintre blocking si non-blocking sockets
Blocking este atunci când nu putem servi mai mult de o conexiune într-un singur thread. În mod
implicit, soclurile TCP funcționează în modul de blocare.
Non-blocking atunci când orice operație este executată imediat. I / O care nu blochează înseamnă
că cererea este pusă în coadă imediat și că funcția este returnată.
 În protocolul TCP există Three Way Handshake, de ce în UDP nu există?
Deoarece în protocolul TCP Three Way Handshake (numit și strângere de mână TCP; strângere
de mână cu treimesaje) este metoda folosită pentru a stabili o conexiune TCP/IP printr-o rețea bazată pe
protocolul Internet, însă pentru protocolul UDP nu are nevoie de a stabili conexiunea dată.
 Numiti cele 2 apeluri de sistem necesare pentru a crea un server UDP
 socket(int domain, int type, int protocol) - creează un socket nelimitat în domeniul specificat.
 bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) - asignează adresa socket-ului
 Care este rolul metodei bind()?
Metoda bind () definește o relație între socket-ul pe care l-ați creat și adresele disponibile pe gazda
dvs.
 Care este rolul metodelor sendto() și recvfrom()?
O dată creat un socket, procesul poate trimite datagrame de pe acel socket, prin apelul funcției
sendto(). Datagramele trimise vor avea ca adresă sursă adresa socket-ului ¸si ca adresă destinația ¸si
conținut util valorile date ca parametri funcției sendto().
Destinatarul poate citi o datagramă apelând funcția recvfrom(). Această funcție ia următoarea
datagramă adresată socket-ului dat ca parametru la recvfrom() ¸si o transferă din buffer-ele sistemului
local ân memoria procesului apelant.
 Care este dimensiunea antetului unui pachet UDP în octeți?
Antetul UDP este alcătuit din 4 câmpuri fiecare având lungimea de 2 octeți.
 Într-o conexiune UDP, clientul sau serverul trimite mai întâi datele?
Într-o conexiune UDP serverul nu are nevoie de conexiune cu clientul, astfel el mereu asteaptă
Datagramele trimise de clienți. Deci, mai întâi date va transmite clientul către server și anume datele
finale, fără a se conecta la protocol.
 Care este adresa de loopback IPv6 și care este rolul ei?
Loopback este un canal de comunicare cu un singur sfarsit. Pe majoritatea calculatoarelor,
„localhost” se rezolvă în adresa ip 127.0.0.1, către adresa loopback IPv6
 De unde știe un sistem de operare ce aplicație este responsabilă pentru un pachet primit din
rețea?
Un sistem de operare știe ce aplicație este responsabilă de pachetul primit din rețea datorită
informației care îl conține, astfel el în dependență de portul înscris în pachet el transmite către aplicația
respectivă care suportă astfel de port.
 Datele primite prin recvfrom() au întotdeauna aceeași dimensiune cu datele trimise cu
sendto()?
După ce datele sunt primite prin recvfrom() sistemul nu garantează livrarea tuturor datagramelor
(este posibilă pierderea unor datagrame) și nici nu oferă vreun mecanism de informare a expeditorului în
cazul unei pierderi. Mai mult, există posibilitatea ca o datagamă să fie duplicată. Din acest motiv nu
întotdeauna datele tprimite au aceeași dimensiune cu datele trimise.
 Este acceptabil să închei execuția programului dacă este detectată o eroare de rețea?
Da, deoarece clientul poate sa incerce din nou sa se conecteze la rețea nu este o problemă
deoarece încheierea executiei programului nu ar costa mai multe resurse si timp decat incercarea de a se
conecta din nou la retea, pentru că UDP nu are nevoie de a face legătura cu serverul.
 De ce nu este folosit algoritmul Nagle în protocolul UDP?
Algoritmul Nagle intarzie trimiterea de pachete mici pe retea bazanduse pe teoria ca vor mai
aparea viitoare pachete curand. Dacă am transmite un pachet UDP care 2 octeți algoritmul Nagle le va
contra-ataca acesta ducând la întârzierea trimiterii pachetului.
 Ce instrumente listează socket-urile UDP deschise în sistemele de operare Windows și
Linux?
Pentru Windows putem folosi Command Prompt și comanda:
 netstat -an | find "UDP" | more
Pentru Linux putem folosi același terminal și următoarele comenzi:
 /proc/net/tcp -a
 ss -s
 Același program poate folosi UDP și TCP?
Da, se poate, folosind sockete diferite. Însă sincronizarea între aceste căi de comunicare este
dificilă.
 Diferența dintre aplicații UDP Unicast, Broadcast, și Multicast
 Unicast - transmiterea unui mesaj de la o singură sursă se poate realiza către o singur
destinatar.
 Brodcast- transmiterea unui mesaj de la o singură sursă se poate realiza către toţi membrii unei
subreţele
 Multicast - reprezintă o tehnică de transmitere a unui mesaj sau a unei informaţii către un grup
destinatar, simultan către toţi membrii acestuia, într-o singură transmisie.
 Ce face mai ușor multiplexarea cu UDP decît cu TCP?
Multiplexarea cu UDP este mai ușor decât cu TCP deoarece TCP este un protocol complex,
furnizâd un serviciu orientat pe coexiuni, controlul fluxului, porturi multiple, transmiterea datelor în
ordine pe când multiplexarea este trimiterea simultan a mai multor pachete.
 În protocolul UDP este un antet „Total length”, cum se calculează și care este rolul lui?
În antetul UDP este partea cu Total Length și ea este egală cu dimensiunea în bytes a segmentului
UDP plus dimensiunea headerului (de obicei 8 bytes). Ea este prezentă deoarece UDP transmite mesaje
datagram cu o lungime (lungime udp) are poate fi trimis pe mai multe pachete fragmentate IP și se mai
folosește la calcularea Checksum-ului.