Sunteți pe pagina 1din 4

Lab.

1 - Protocolul HTTP
Condiție:
De dezvoltat o aplicație Java/C# - care va utiliza metodele GET și POST
la nivel de transfer pe protocolul HTTP.
Ca sursă de testare rog să utilizați următorul sait http://httpbin.org/
și anume
1. GET - http://httpbin.org/get
2. POST - http://httpbin.org/post

Funcțional Aplicație:
Vă adresați la pagina cu metoda GET (http://httpbin.org/get) și extragem conținutul din body.
Creați un mesaj pentru metoda POST și îl expediem paginii (http://httpbin.org/post) și extragem conținutul
din body.
Găsiți cod sursă din
(http://www.hanselman.com/blog/HTTPPOSTsAndHTTPGETsWithWebClientAndCAndFakingAPostBack.
aspx), și câte ceva info suplimentar pentru protocolul HTTP.

Lab.2 - Protocolul TCP


Condiție:
De dezvoltat 2 aplicații Client și Server, ce vor avea posibilitate de comunicare.

Elaborarea aplicației va fi efectuată în mediul Visual Studio (limbajul C#), desigur din seria Express
Editions pe care Microsoft, cu mare plăcere, îl oferă gratis. Dezvoltarea aplicațiilor Windows utilizând .Net
Framework este mult facilitată de mediu, care cu adevărat susține sloganul programării COTS „ia și
utilizează”. (Dar poate fi “cumpără şi utilizează”, căci COTS ar însemna commercial off-the-shelf).
Pentru realizarea unei comunicații sunt necesare, în special, clasele Socket, IPAddress şi IPEndPoint,
care se află în spațiile de nume System.Net şi System.Net.Sockets. Deci nu uitaţi să le indicați utilizarea.
Programele de test vor fi două programe de tip console based application (deci atenție la crearea
proiectului, astfel codul sursă ce va implementa interacțiunea îl putem scrie direct în metoda Main al
clasei Program generate de Visual Studio.

Clientul. Din start vom instanţia un obiect de tip IPEndPoint, care ne va identifica serviciul oferit de
aplicaţia server. La crearea obiectului va fi utilizată adresa IP al computerului la care este executat
serverul şi portul “ascultat” de acesta, prestabilit de protocol:

IPEndPoint remoteService= new IPEndPoint(IPAddress.Parse("127.0.0.1"),1100);

Metoda statică IPAddress.Parse ne va permite să creăm automat un obiect IPAddress având ca


parametru un șir, ce trebuie să conţină o notaţie human-friendly de adresă IP. Socketul va fi creat
indicându-i familia de protocoale utilizată (IPEndPoint are ca valoare implicită interNetwork, IPv4), tipul
comunicaţiei (vom alege una orientată pe conexiune, Stream) şi protocolul ce va asigura aceasta din
urmă (din cadrul familiei interNetwork se va utiliza TCP):

Socket s=new Socket(remoteService.AddressFamily,SocketType.Stream,ProtocolType.Tcp);

Urmează încercarea de stabilire a conexiunii şi transmitere/primire date, pe parcursul cărora pot apărea
erori. Astfel, se recomandă de inclus instrucţiunile respective într-un bloc try-catch. Metodele sincrone
(blocande) Send şi Receive ne vor asigura transmiterea şi primirea datelor în octeţi, de aceea şi avem
necesitatea în byte[] Encoding.ASCII.GetBytes(string s) şi string
Encoding.ASCII.GetString(bytes[],index,count) care ne vor oferi posibilitatea de a realiza conversiile
necesare. Aici aş putea doar să menţionez că Recieve returnează numărul de octeţi citiţi din socket. Iar
acest număr poate fi utilizat de ciclul do-while.
Metoda Main a Clientului:
static void Main(string[] args) {
IPEndPoint remoteService= new IPEndPoint(IPAddress.Parse("127.0.0.1"),1100);
Socket s = new Socket(remoteService.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try{
s.Connect(remoteService);
String mts = "Salut!";
Byte []buffer = Encoding.ASCII.GetBytes(mts);
Console.WriteLine(mts);
s.Send(buffer);
Byte []rbuffer = new byte[256];
string rm = ""; int rb=0;
do{
rb=s.Receive(rbuffer,rbuffer.Length,SocketFlags.None);
rm = rm + Encoding.ASCII.GetString(rbuffer,0,rb); }
while(rb > 0);
Console.WriteLine(rm);
s.Shutdown(SocketShutdown.Both);
s.Close();
}
catch (Exception e) {
Console.WriteLine(e.Message);
}
}

Serverul. Pentru server la fel va fi necesar de stabilit un punct terminal de conexiune, dar care va indica
spre orice adresă, iar portul OBLIGATOR trebuie să fie ca şi cel specificat la client (dar poate fi şi invers:)

IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 1100);

Este important de menţionat că aplicaţia server spre deosebire de client pe lângă faptul că trebuie să
transmită/primească date, mai este responsabilă de acceptarea şi gestiunea conexiunilor clienţilor.
Aceasta este realizată cu ajutorul unui socket de tip server (numit şi Listener).
Pentru a specifica că orice adresa este eligibilă, socketul iniţial se asociază cu punctul terminal nedefinit
de conexiune:

server.Bind(ipe);

apoi se lansează cu parametrul ce va indica numărul de conexiuni ce pot fi în coada de aşteptare (în caz
dacă parvin simultan mai multe cereri de conexiuni):

server.Listen(15);

Acest “listener” socket acceptînd conexiunea va permite transmiterea/primirea datelor, dar de acum prin
alt socket primit de la metoda Accept:

Socket clientSocket = server.Accept();

Metoda Main a Serverului:


public static void Main(string[] args) {
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 1100);
Socket server = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
server.Bind(ipe);
server.Listen(15);
byte[] buffer = new byte[1024];
while (flag) {
Socket clientSocket = server.Accept();
int rb = clientSocket.Receive(buffer);
Console.WriteLine(Encoding.ASCII.GetString(buffer,0, rb));
String mts = "La revedere!";
byte[] buffer1 = new byte[Encoding.ASCII.GetByteCount(mts)];
buffer1 = Encoding.ASCII.GetBytes(mts);

Console.WriteLine(mts);
clientSocket.Send(buffer1);
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
}

Lab.3 - Protocolul UDP


Aceasta condiție este doar pentru acei care doresc +1 punct la examen.

Condiție:
De realizat același Client Server aplicație - ca și pentru laboratorul Nr2.
Cerința diferă doar în utilizarea Socketu-lui și desigur a protocolului UDP pentru comunicare Client
Server.

Întrebări la Susținere de laborator și


examen:
1. Metodele protocolului HTTP.
2. Ce și care sunt câmpurile dispuse pe protocolul HTTP.
3. Data-gramele protocolului TCP și UDP.
4. Ce sunt Pipes Conection Oriented
5. Diferența dintre Named Pipes și TCP/IP Sockets.
6. Modelele ISO/OSI
7. Noțiuni generale despre broadcast și multicast protocolul UDP
8. Socket-uri

Materiale utile:

TCP
http://book.itep.ru/7/sock_71.htm
http://www.codeproject.com/Articles/12893/TCP-IP-Chat-Application-Using-C
https://www.youtube.com/watch?v=22uLlz70Fsw

HTTP
http://www.bindichen.co.uk/post/Fundamentals/HTTP%20Basics.html
https://www.youtube.com/watch?v=80Y6spNzncc&feature=youtu.be
http://www.hanselman.com/blog/HTTPPOSTsAndHTTPGETsWithWebClientAndCAndFakingAPostBack.
aspx
Și încă câte ceva util din materiale pentru curs și laborator

[!] A. Tanenbaum, Reţele de calculatoare (ediţia a patra), Byblos, Tg.Mureş, 2003 (Э. Таненбаум,
Компьютерные сети. Питер, 2003)
[!] Lup sa Radu-Lucian, Ret ele de calculatoare, Casa C art ii de S tiint a, 2008, ISBN: 978-973-133-377-
9, http://www.cs.ubbcluj.ro/~rlupsa/works/retele.pdf
Bulăceanu C., Reţele locale de calculatoare. Arhitecturi prezente şi viitoare, Bucureşti, Editura tehnică,
1995
Bolun I., Iniţierea în reţele. Internet. Chişinău, Editura ASEM, 1997
[!] Семенов Ю.А., Телекоммуникационные технологии saturn.itep.ru
В.Г. Олифер, Н.А. Олифер, Основы сетей передачи данных (Лекции), Intuit.ru
Олифер В. Г., Олифер Н. А., Компьютерные сети. Принципы. Технологии. Протоколы, Питер,
Санкт-Петербург, 2002
Păunescu F., Goleşteanu D.P. Sisteme cu prelucrare distribuita şi aplicațiile lor, Bucureşti, Editura
Tehnica, 1993 -560 p.
Boian F. Programarea distribuită în Internet Metode şi aplicaţii, Cluj-Napoca, Editura Albastră, 2000 – 450
p.
Frăsinaru Cristian, Curs practic de Java, (Capitolul 13. Programare în rețea), Matrix Rom,
2005, http://thor.info.uaic.ro/~acf/java/Cristian_Frasinaru-Curs_practic_de_Java.pdf

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