Dezvoltarea unei aplicatii client

Download Report

Transcript Dezvoltarea unei aplicatii client

C14 – LPO: Client - Server
CUPRINS
Reţele de calculatoare:




concepte
clasificari;
dispozitive;
Protocoale de reţea:


TCP/IP
Pachete Java si comunicatia in retea
Comunicati intre Client si Server:




socket
stabilirea comunicatiei, prelucrai, terminare.
Obiective
După parcurgerea acestui curs ar trebuie sa puteţi:
 întelege conceptul de reţea de calculatoare
împreună cu modalităţile de clasificare a
acestora;
 înţelege conceptul general de protocol de
comunicaţie şi în particular cel de TCP/IP;
 cunoaşte şi utiliza clasele Java pentru lucrul în
reţea;
 implementa o aplicaţie de reţea client-server.
Retele - concepte




in domeniul reţelelor de calculatoare, termenul dispozitiv
utilizator este folosit pentru a defini un echipament electric care
este conectat la retea (calculator, imprimant, scanner etc.) în
scopul schimbului de date cu un alt echipament al reţelei;
termenul dispozitiv de reţea este folosit pentru a descrie
echipamentele electrice necesare pentru interconectarea
dispozitivele utilizator în vederea schimbului de date;
dispozitivele de retea sunt conectate prin cabluri electrice (sau
prin unde radio - wireless) si asigur transmisia, receptia,
gestionarea datelor ce se doresc a fi transferate între dispozitivele
utilizator;
câteva dintre numele de dispozitive vehiculate mai des sunt
prezentate, pe scurt, în continuare: repetor, hub, bridge, switch,
router si gateway.
Clasificari de retele

Exista multe criterii de clasificare a retelelor, iata
câteva dinte ele:





extinderea geografica: LAN, MAN, WAN etc.;
topologie: stea, magistral, inel etc.;
proprietar: public, privat;
tehnologia folosita: comuntata (switched) / conexiune
permanenta (permanent links), cu legatura fizica
(physical link) sau virtuala (virtual link), orientat pe
conexiune (connection-oriented) sau far conexiune
(connectionless) etc.
viteza: band larg (broadband), band îngust
(narrowband).
Protocoale de retea





comunicatia in reţelele de calculatoare pot fi vazuta ca o
grupare de protocoale aproape independente, fiecare dintre
acestea operând la un anumit nivel;
nivelul cel mai de jos asigură comunicaţia fizică între
calculatoare, în timp ce nivelul cel mai înalt constă în
aplicaţiile utilizatorului;
fiecare nivel se foloseşte de nivelul inferior, pentru a pune la
dispoziţia nivelului superior, un grup de servicii;
la fiecare nivel, programe rulate pe calculatoarele reţelei
folosesc protocoale corespunzătoare nivelului pentru a
comunica între ele;
avantajul protocoalelor pe nivele constă în specificaţiile
clare ale metodelor de transmitere a informaţiilor de la un
nivel la altul ca parte a protocolului.
TCP / IP




poate fi utilizat atât pentru transportul datelor într-o LAN cât şi pentru
interconectarea mai multor LAN-uri;
la interconectarea LAN-urilor datele pot fi transferate între
calculatoarele unor LAN-uri distincte, dar numai cu ajutorul unor
dispozitive de reţea de tipul router sau gateway;
TCP este un protocol de comunicaţie sigur (garantează că toate datele
ajung la destinaţie fără erori, în ordinea în care s-au trimis), asigură
controlul fluxurilor (atunci când receptorul nu mai poate accepta date
acesta va opri transmisia cu un semnal, iar când recepţia devine din
nou posibilă o va reporni cu un semnal) şi orientat pe conexiune
(transportul de date între calculatoare se face într-un flux continuu, în
trei faze bine definite: stabilirea conexiunii, transferul de date şi
eliberarea conexiunii);
IP este un protocol fără conexiune, ce lucrează cu priorităţi (tipurilor de
trafic li se atribuie priorităţi) şi comutare de pachete (pachetele de date
sunt expediate individual între calculatoare, fără existenţa unei rute
prestabilite).
Pachete Java pentru
comunicatie in retea





pachetul de baza in care sunt grupate clasele si interfetele pentru lucrul in
retea este: java.net;
java.net asigura comunicatia intre aplicatii bazata pe fluxuri dar permite si
comunicatia pe baza de pachete individuale (folosite in transmisia video si
voce);
socket-ul este un obiect care incapsuleaza o conexiune TCP (bidirectionala,
punt-la-punct si sigura), aplicatiile manipuleaza datele conexiunii prin fluxuri
de I/E; aplicatia poate citi sau scrie un socket prin atasarea la aceasta de
fluxuri de I sau de E; aplicatiile stabilesc o conexiune intre ele iar datele se
transfera sub forma de fluxuri, din acest motiv comunicatia se numeste
orientata pe conexiune (transmisia se realizeaza la nivel de retea utilizand
protocolul TCP/IP);
pentru lucrul cu pachete individuale de folesesc datagram socket-uri,
transmisia se face printr-un protocol numit UDP care este fara conexiune
(gestionarea pachetelor trebuie facuta prin cod – ordine, erori, dubluri …);
exista doua categorii de Socket-uri in Java, unul pentru server sau altul
pentru clienti: ServerSocket si Socket;
Dezvoltarea unei aplicatii
client-server - 1







aplicatia are la baza un server la care se poate conecta un client;
crearea socket-ului la server-ului se face cu linia de cod:
serverSocket = new ServerSocket(port, coada);
unde port este un numar intreg in domeniul [0, 65535] (majoritatea
sistemelor de operare au porturi ) iar coada defineste numarul maxim
de clienti ce pot astepta conectarea de server;
port se foloseste de clienti pt. indentificarea server-ului pe masina pe
care acesta se ruleaza deoarece aceasta poate rula simultan mai multe
server-e;
aplicatiile client trebuie sa se lege obligatoriu la acest port deoarece un
port identifica unui o singura aplicatie (server-ul);
comunicatia cu clientii, se deruleaza la nivelul de server, prin cererea de
conectare:
clientSocket = serverSocket.accept();
clientSocket permite interactiunea dintre client si server;
Dezvoltarea unei aplicatii
client-server - 2
transmisia de date se realizeaza intre client si server prin obiectele in si
out create astfel (comunicatia se face prin texte fluxurile de socket-uri
fiind din categoria de scanner si writer):
PrintWriter out = new
PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));





PrintWriter-ul buffer-eaza caracterele trimise pentru cresterea
performatelor, buffer-ul se goleste cu metoda flush() sau prin true;
server-ul trimite date clientului prin out si primeste date de la client prin
in , este important ca aceste fluxuri sa fie la fel declarate si la client;
urmatoarea etapa este derularea comunicatiei si a procesarilor ce se
doresc a fi facute la server, in exemplu ce urmeaza server-ul trimite catre
client inapoi ceea ce a i-a trimis clientul dar dupa adaugarea a datei si
adresei IP a server-ului;
terminarea conexiunii este ultima etapa si se face prin metoda close().
Dezvoltarea unei aplicatii
client-server - 3
while ((inputLine = in.readLine()) != null) {
//linia trimisa inapoi la client
outputLine = inputLine + now(" yyyy-MM-dd HH:mm:ss ")+"IP:“
+ thisIp.getHostAddress();
out.println(outputLine);
//se afiseaza pe ecran-ul server-ului
//linia retrimisa la client
System.out.println(outputLine);
//daca linia este vida procesul se incheie
if(inputLine.length()==0) break;
}
Dezvoltarea unei aplicatii
client-server - 4

implementarea clientului are la baza o conexiune Socket, constructorul ei
poate genera exceptia UnknownHostException:
try {
echoSocket = new Socket("localhost", 4444);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new
InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Nu stiu cine este host: localhost");
System.exit(1);
}
}

prin flux se transmit caractere ce se pot afisa pe ecran sau stoca mai
departe in fisiere.
Dezvoltarea unei aplicatii
client-server - 5

clientul foloseste out pentru a trimite catre server a linie introdusa de la
tastatura de utilizator, daca linia este vida (se apasa <Enter>)
comunicatia de termina:
BufferedReader stdIn = new BufferedReader( new
InputStreamReader(System.in));
String userInput, serverInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
serverInput=in.readLine();
System.out.println("ecou: " + serverInput);
if(userInput.length()==0) break;
}
Dezvoltarea unei aplicatii
client-server - 6
implementarea unui server care poate accepta conexiuni
multiple simultan presupune existenta unui Socket pentru
fiecare conexiune de client;
de fiecare data cand serverSocket.accept() este
realizata cu succes se lanseaza un nou Thread care se ocupa
de noua conexiune;


while (true) {
Runnable r = new ServerMThread(serverSocket.accept(),i);
Thread t = new Thread(r);
t.start();
++i;
}
Dezvoltarea unei aplicatii
client-server - 7

ciclul de comunicatie se ruleaza la infinit in metoda run(); fiecare client
nou conexiune porneste un Thread nou prin care comunica cu server-ul.
public class ServerMThread extends Thread {
…
public void run() {
try {
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
String inputLine, outputLine;
InetAddress thisIp = InetAddress.getLocalHost();
while ((inputLine = in.readLine()) != null) {
outputLine = inputLine +"… IP:"+thisIp.getHostAddress();
out.println(outputLine);
System.out.println(outputLine);
if(inputLine.length()==0) break;
}
out.close(); in.close(); clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Intrebari
1.
2.
3.
4.
5.
Care este rolul unei retele de calcuatoare?
Ce este TCP/IP?
Unde se folosesc ServerSocket si
Socket in cod?
Ce metoda se folosete pentru asteptarea
conexiunilor de clienti?
Cum se implementeaza un server ce poate
accepta, simultan, conexiuni multiple?
Bibliografie
1.
2.
3.
4.
5.
6.
http://www.oracle.com/technetwork/java/javase/documenta
tion/index.html
http://docs.oracle.com/javase/6/docs/
Ştefan Tanasă, Cristian Olaru, Ştefan Andrei, Java de la 0
la expert, Polirom, 2003, ISBN: 973-681-201-4.
Herber Schild, Java 2 - The Complete Reference, Fourth
Edition, Osborne, 2001, ISBN: 0-07-213084-9.
Deitel H.M., Deitel P. J., Java - How to programm, Fith
Edition, Prentice Hall, 2003, ISBN: 0-13-120236-7.
http://www.east.utcluj.ro/mb/mep/antal/downloads.html