Programare in Internet folosind limbajul Java

Detalii

CategoriiIT
TaguriWebmasteri
Ultima actualizareMarti 5 august 2014
Vizualizari13823

Voteaza & Distribuie

Descriere

Biblioteca standard a limbajului Java ofera un nivel inalt de abstractizare pentru programarea aplicatiilor de retea. Acest suport este oferit de pachetul "java.net". Cu ajutorul "java.net", comunicatia intr-o retea de calculatoare se reduce la efectuarea unor operatii de intrare/ iesire prin intermediul fluxurilor (in engleza "stream").

Suportul pentru efectuarea operatiilor de intrare/ iesire este furnizat de pachetul "java.io". Vom defini in continuare cativa termeni de baza din domeniul retelelor de calculatoare: Server = un calculator (program in executie) din cadrul unei retele care furnizeaza servicii altor calculatoare (programe in executie) din cadrul retelei. Client = un calculator (program in executie) dintr-o retea care beneficiaza de serviciile unui calculator (sau program) server. TCP/IP = o pereche de protocoale de comunicatie (protocolul TCP fiind orientat pe conexiune) care permite transferul sigur si fiabil al pachetelor de date intre un client si un server in Internet. Protocolul generic TCP/IP se bazeaza pe notiunile de port si soclu. Port = un canal abstract prin care un calculator (program care ruleaza pe calculator) poate comunica spre si dinspre exterior. Un port este identificat printr-un numar.

Porturile din intervalul 1..1023 sunt rezervate pentru servicii speciale. Cateva dintre acestea sunt: Port 21 - FTP, Port 25 - SMTP, Port 80 - HTTP, Port 110 - POP3, etc... Soclu = o pereche formata dintr-o adresa IP si un port. Un soclu abstractizeaza notiunea de canal de comunicatie intr-o retea bazata pe TCP/IP, usurand astfel programarea. Pasii pentru crearea in Java a unui program server simplu sunt: 1. Crearea unui obiect "ServerSocket". Clasa "ServerSocket" abstractizeaza un soclu care asteapta cereri de conectare de la programele client. Constructorul clasei "ServerSocket"primeste ca parametru numarul portului pe care programul server primeste cereri de conexiuni. 2. Asteptarea de cereri de conectare de la programele client prin apelarea metodei "accept()" a clasei "ServerSocket".

Asteptarea este cu blocare. 3. La primirea unei cereri de conectare, apelul "accept()" returneaza un soclu care poate fi folosit pentru comunicarea intre programul client si programul server. Un soclu este abstractizat printr-un obiect al clasei "Socket". 4. Prelularea si trimiterea de date de la programul client se realizeaza prin intermediul fluxurilor de intrare/ iesire. Obtinerea acestor fluxuri se face prin apelarea metodelor "getInputStream()" si "getOutputStream()" ale clasei "Socket". Pasii pentru crearea in Java a unui program client simplu sunt:

1. Crearea unui soclu pentru comunicarea cu programul server folosind un constructor al clasei "Socket". Acest constructor primeste adresa de Internet a calculatorului pe care ruleaza programul server, precum si numarul portului. Pentru reprezentarea unei adrese de Internet se foloseste clasa "InetAddress". Prin crearea acestui soclu se deblocheaza asteptarea din apelul cu blocare "accept()" corespunzator din programul server.

2. Clientul trimite si primeste date la, respectiv de la programul server prin intermediul fluxurilor de intrare/ iesire. Obtinerea acestor fluxuri se face prin apelarea metodelor "getInputStream()", respectiv "getOutputStream()" ale clasei "Socket".

3. In cazul unui server care accepta conectarea simultana a mai multor clienti se pot folosi firele de executie (in engleza "thread"). In acest caz programul server poate crea cate un fir de executie separat pentru tratarea fiecarei conexiuni in parte. Acest fir de executie va primi ca parametru soclul returnat de apelul "accept()".

4. Pentru a reduce efortul suplimentar necesar pentru crearea, respectiv distrugerea de fire de executie, se poate folosi tehnica "rezervei de fire" (in engleza "thread pooling").

Astfel, ori de cate ori un fir nu mai este necesar, el poate fi pastrat intr-o rezerva (in engleza "thread pool"), fiind astfel disponibil pentru o folosire ulterioara. Se vor crea noi fire de executie numai atunci cand aceasta rezerva este goala. Pentru reprezentarea firelor de executie in java, se foloseste clasa "Thread". Lansarea in executie a unui fir se face prin apelul metodei "start()". Corpul propriuzis al unui fir se amplaseaza in cadrul metodei "run()".