Download presentation
Presentation is loading. Please wait.
Published byὈδυσσεύς Βαρουξής Modified over 6 years ago
1
Programarea orientată pe obiecte (POO) Limbajul JAVA
Capitolul 5 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
2
POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
POO: Cuprins pe scurt 1. PROGRAMAREA ORIENTATĂ PE OBIECTE 2. LIMBAJUL JAVA – prezentare generală 3. LIMBAJUL JAVA – instrucțiuni 4. LIMBAJUL JAVA – POO 5. LIMBAJUL JAVA – mecanismul Client-Server 6. LIMBAJUL JAVA – accesarea bazelor de date 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
3
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (programarea distribuită) 5.2. Client/server 5.3. Exemplu 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
4
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (programarea distribuită) Paradigme (hard/soft) ale comunicării în reţea: modelul client/server; apelul procedurilor la distanţă (RPC); comunicarea punct-la-punct (peertopeer– P2P); 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
5
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) Comunicare între filozofi cei doi filozofi (F1/F2) au reguli de prezentare a conceptelor; cei doi traducători (T1/T2) au reguli de traducere (limba, „citatele”, etc.); cei doi ingineri de comunicaţie stabilesc suportul de comunicare, sistem de apel/adresare, protecţie... fiecare mesaj trece prin 6 mâini. 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
6
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) Modelul OSI (Open System Interconection) ISO (International Standards Organization) a propus modelul de comunicare în reţea (OSI). Foloseşte un model pe 7 nivele: 7 – nivel aplicaţie/proces (application layer): propuneri de interfaţă comună între utilizatori; 6 – nivel prezentare (presentation layer): indică sintaxe comune folosite între aplicaţii sau utilizatori; 5 – nivel sesiune (session layer): gestionează dialogul între aplicaţii sau utilizatori; 4 – nivel trasnport (transport layer): oferă cel mai înalt nivel de servicii, incluzând refaceri cap la cap, multiplexare şi control de flux; 3 – nivel reţea (network layer): fixează şi rutează fluxul de date între capetele comunicaţiei; 2 – nivel legătura de date (data-link layer): fixează o transmisie fără erori în jurul unei linii de transmisie; 1 – nivel fizic (physical layer): specificaţii electronice, mecanice de transmisie. 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
7
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) În practică avem protocoale concrete: Transmision Control Protocol / Internet Protocol (TCP/IP); Xerox Network System (XNS sau PEX/SPP); IBM System Network Architecture (SNA); Unix to Unix CoPy (UUCP); 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
8
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) Exemplu: TCP/IP şi XNS are 4 nivele: 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
9
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) FTP, TELNET Nivel Proces Proces User 5,6,7 OSI Socket, RPC, RMI TCP, UDP Nivel Transport 4 OSI (mesaj) IP, ARP, etc Nivel Reţea IP, IDP 3 OSI (pachet) ETHERNET, TOKEN RING Nivel Legatura De Date Interfaţă hard 1,2 OSI (frame)→ entităţi 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
10
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) Alţi termeni: încapsulare/dezîncapsulare; multiplexare/demultiplexare; fragmentare/asamblare; comutare; 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
11
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) Un frame ethernet: pachet IP pachet (mesaj) UDP mesaj TFTP mesaj Antet leg. date Antet Reţea Antet transport Antet proces MESAJ (date) Sf. Mesaj Ethernet IP UDP (TCP) TFTP Coada Ethernet 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
12
5. LIMBAJUL JAVA – mecanismul Client-Server
5.1. Programarea în reţea (continuare) Multiplexare (combinare elemente) şi demultiplexare. Fragmentare şi reasamblare (vezi constanta MTU, Maxim Trasport Unit) Pentru a defini o legătură între două procese, se foloseşte termenul de conexiune. Termenul de asociere denumeşte un cvintuplu care specifică complet o conexiune: (Protocol, AdresaLocala, ProcesLocal, AdresaDepartata, ProcesDepartat) 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
13
5. LIMBAJUL JAVA – mecanismul Client-Server
Socket şi Apelul procedurilor de la distanţă (RPC, RMI) La nivel proces se foloseşte noţiunile de socket şi port: Socket: capăt de comunicaţie (sau punct final de comunicaţie), care poate fi numit şi adresat într-o reţea, este locul unde programul de aplicaţie se întâlneşte cu furnizorul mediului de transport; dpdv al programului de aplicaţie, un socket este o resursă alocată de sistemul de operare; dpdv al SO este o structură de date întreţinută de către nucleul SO, referită în programele de aplicaţie printr-un întreg numit descriptor de socket. Port: din perspectiva unei aplicaţii un port este un capăt al unui canal de comunicaţie; o aceeaşi intefaţă de reţea poate fi folosită simultan de mai multe aplicaţii, fiecare dintre acestea având alocat câte un port. (un intreg de 16 biţi); 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
14
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Client/Server (continuare) Modelul client/server Proces server – Ofera servicii obţinute prin reţea – Acceptă (iterativ sau concurent) cereri de la un proces client, realizează un anumit serviciu şi returnează rezultatul Proces client – Iniţializează comunicarea cu serverul – Solicită un serviciu, apoi aşteaptă răspunsul serverului 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
15
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Client/Server (continuare) Analogii: Cutia poştală: proprietarul ei (programul de aplicatie) depune corespondenta de trimis şi de unde îşi ridică corespondenţa primită; factorul poştal (furnizorul mediului de transport) deschide cutia de câteva ori pe zi, ridică corespondenţa de expediat şi depune corespondenţa sosită la adresa respectivă Aparat telefonic: proprietarul formează un număr şi după stabilirea legăturii începe să discute cu persoana de la celălalt capăt al firului; aparatul plus întreaga reţea telefonică asigură stabilirea legăturii şi asigură stabilitatea acesteia până la închiderea unuia dintre cele două aparate. Socket stream (orientat conexiune, analogia cu ap telefonic) cu TCP Socket datagram (serviciu fără conexiune) cu UDP. Apelul procedurilor de la distanţă (RPC, RMI) apare ca o continuare naturală a noţiunii de socket: ce sarcini vor fi executate local şi ce sarcini vor fi executate la distanţă; definirea unui protocol care să specifice: procedura la distanţă, argumentele, rezultatele + semantica Exemplu (slide-ul următor): 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
16
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Client/Server (continuare) CITIREA UNUI FIŞIER 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
17
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Client/Server (continuare) Scenariul aplicaţiilor socket stream (implementări client/server) Programarea aplicaţiilor care folosesc protocol cu servicii orientate conexiune (socket stream) se folosesc câteva apeluri sistem; unele sunt apelate de către server altele de către client: 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
18
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Client/Server (continuare) La server: socket: cere nucleului SO să creeze un socket prin care să poată fi contactat de către clienţi; aici se fixează familia de adrese folosită, precum şi tipul de socket folosit. bind: transmite nucleului SO numărul de port la care serverul aşteaptă să fie contactat precum şi faptul că poate fi contactat prin orice interfaţă de reţea de pe maşina server. listen: cere nucleului SO să dimensioneze lungimea cozii de aşteptare la socket La client: socket: cere nucleului SO să creeze un socket prin care să poată fi contactat de către server; Relaţia: La un moment dat clientul execută un apel sistem connect, prin care îi transmite nucleului SO al lui adresa IP şi numărul de port ale serverului căruia doreşte să-i ceară un serviciu; nucleul, prin mecanismul socket contactează serverul solicitat. Serverul, odată cu lansarea apelului sistem accept, rămâne în aşteptare până când un client îl contactează; odată contactat, el primeşte adresa IP şi numărul de port ale clientului contactat. Clientul execută unul sau mai multe apeluri sistem send prin care transmite serverului un mesaj prin care îi cere un serviciu; Serverul, prin apelurile sistem recv recepţionează acest mesaj; Apoi, serverul, execută acţiunile necesare satisfacerii cererii clientului. Trimiterea rezultatului de către server către client se face similar: serverul trimite apeluri send, iar clientul recepţionează prin apeluri recv. 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
19
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Client/Server (continuare) Pentru aplicaţiile cu mai multi clienţi avem schema: 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
20
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Exemplu import java.net.*; import java.io.*; public class MaxServer { // clasa principla a aplicatiei, trimite date la client public static void trimiteDateLaClient (DataOutputStream out, String sir) throws IOException { out.writeUTF(sir); // trimite la client stringul sir out.flush(); // goleste fluxul System.out.println("Am trimis la client:"+sir); } public static String primesteDateDeLaClient (DataInputStream in) throws IOException { String sir=in.readUTF(); // obtine raspunsul de la client System.out.println("Am primit de la client:"+sir); // afis. mesaj de la consola return sir; public static void main (String []args) { DataInputStream in = null; // declararea variabilelor DataOutputStream out = null; ServerSocket server= null; Socket s= null; try { server = new ServerSocket(2013); // creare socket pentru server la port 2013 System.out.println("Asteptam un client"); // afis. mesaj de la consola s = server.accept(); // acceptarea unei conexiuni cu un client System.out.println("S-a stabilit conexiunea cu clientul"); in =new DataInputStream (new BufferedInputStream(s.getInputStream())); //obtinerea unui flux de intrare out=new DataOutputStream (new BufferedOutputStream(s.getOutputStream()));//obtinerea unui flux de iesire catch (IOException e){ System.err.println("eroare la conectare:"+e); // tratare exceptie 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
21
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Exemplu (continuare) String sirNumere=""; // declararea altor variabile double nr1=0.0, nr2=0.0; double max=0.0; try { sirNumere = primesteDateDeLaClient(in); // primirea unui numar Double tmp = Double.valueOf(sirNumere); nr1 = tmp.doubleValue(); sirNumere = primesteDateDeLaClient(in); // primirea celuilalt numar tmp = Double.valueOf(sirNumere); nr2 = tmp.doubleValue(); max = (nr1>nr2)?nr1:nr2; // determina maxim trimiteDateLaClient(out, Double.toString(max));// trimite rezultat } catch (IOException e){ System.err.println("eroare la trimitere/primiredate:"+e);// tratare exceptie }// main }// MaxServer 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
22
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Exemplu (continuare) import java.net.*; import java.io.*; public class MaxClient { // clasa principla a aplicatiei // trimite date catre server public static void trimiteDateCatreServer (DataOutputStream out, String sir) throws IOException { out.writeUTF(sir); // trimite la server stringul sir out.flush(); // goleste fluxul System.out.println("Am trimis la server:"+sir); } public static String primesteDateDeLaServer (DataInputStream in) throws IOException { String sir=in.readUTF(); // obtine raspunsul de la server System.out.println("Am primit de la server:"+sir); // afis. mesaj la consola return sir; public static void main (String []args) { // declararea variabilelor DataInputStream in = null; DataOutputStream out = null; Socket s= null; try { s = new Socket(" ",2013);//stabilirea unei conexiuni cu servarul local, port 2013 System.out.println("ne-am conectat la server"); // afis. mesaj de succes // obtinerea unui flux de intrare in = new DataInputStream (new BufferedInputStream(s.getInputStream())); // obtinerea unui flux de iesire out = new DataOutputStream (new BufferedOutputStream(s.getOutputStream())); } catch (IOException e){ System.err.println("eroare la conectare:"+e); // tratare exceptie System.exit(1); 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
23
5. LIMBAJUL JAVA – mecanismul Client-Server
5.2. Exemplu (continuare) double nr1=0.0, nr2=0.0; // declararea altor variabile BufferedReader tastatura; String linie; try { tastatura = new BufferedReader(new InputStreamReader(System.in)); System.out.flush(); System.out.print("dati primul numar:"); linie=tastatura.readLine(); Double tmp = Double.valueOf(linie); nr1 = tmp.doubleValue(); System.out.print("dati celalalt numar:"); linie=tastatura.readLine(); tmp = Double.valueOf(linie); nr2 = tmp.doubleValue(); tastatura.close(); // inchiderea intrarii standard } catch (IOException e){ System.err.println("citire gresita de la tastatura:"+e);// tratare exceptie String rezultat=""; try { trimiteDateCatreServer(out,Double.toString(nr1)); // comunicare cu serverul trimiteDateCatreServer(out,Double.toString(nr2)); rezultat = primesteDateDeLaServer(in); System.err.println("eroare la trimitere/primire date:"+e);// tratare exceptie System.out.println("maximul="+rezultat); }// main }// MaxClient 12/9/2018 POO - Cap. 5. LIMBAJUL JAVA – mecanismul Client-Server
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.