Architettura Client-Server



Documenti analoghi
Corso di Reti di Calcolatori L-A

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Programmazione distribuita in Java. Socket & Client-Server

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel , dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Programmare con le Socket TCP in java. 2: Application Layer 1

Sockets in Java. Lorenzo Gallucci

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione

Socket & RMI Ingegneria del Software - San Pietro

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Parte II: Reti di calcolatori Lezione 10

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_ Stefano Millozzi

Programmare con le Socket

Programmare con le Socket TCP

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Applicazioni web. Parte 5 Socket

appunti delle lezioni Architetture client/server: applicazioni client

Programmazione dei socket con TCP #2

Sincronizzazione con Java

Reti di Calcolatori:

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Il linguaggio Java I file sequenziali

Corso di Reti di Calcolatori. java.net.url

Altri tipi di connessione

Laboratorio di reti I: Il pacchetto java.net

MagiCum S.r.l. Progetto Inno-School

Java Socket LSO 2008

20 - Input/Output su File

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Applicazioni distribuite

appunti delle lezioni Architetture client/server: applicazioni server

Programmazione di rete in Java

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Introduzione ai (Java) socket

Corso sul linguaggio Java

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

PROGRAMMARE IN JAVA VOLUME II

Telematica II 12. Esercitazione/Laboratorio 4

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Controllo Winsock di Visual Basic

Basic Network Tutorial

Java threads (2) Programmazione Concorrente

Networking. Mauro Migliardi Ph. D.

Esercizio 2. Client e server comunicano attraverso socket TCP

Cifratura simmetrica

Introduzione. Java. G. Prencipe accesso alla rete -- TCP

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Programmazione II: Esami Svolti

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Lezione n.7 LPR Informatica Applicata Il Protocollo TCP Stream Socket. 20/04/2009 Laura Ricci

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Modello client-server

Introduzione alle applicazioni di rete

Flussi, lettori e scrittori

ESERCITAZIONI DI LABORATORIO 1

Corso di Telematica II

Lezione n.3 LPR - Informatica Applicata

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

DNS: Domain Name System

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

HTTP adaptation layer per generico protocollo di scambio dati

Comunicazione tra processi con sockets TCP

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Esercizi (1-2): da: TCP/IP Sockets in C (Donahoo-Calvert)

JAVA E LA RETE IL CONCETTO DI SOCKET. RETI DI CALCOLATORI Linguaggio Java: La Programmazione di Rete. già pronta!! COMUNICAZIONE VIA SOCKET CORSO DI

Transcript:

Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server manda una risposta ed eventualmente dei dati 5. il client riceve la risposta ed eventualmente i dati Necessità di accordarsi su un protocollo di richiesta/risposta protocol request nomefile server client answer dim_file file thread server DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 1 Distinzione dei ruoli Classi java.net.socket java.net.serversocket Socket implementa una generica socket connessione di tipo stream Socket in Java ServerSocket implementa una socket che consente la ricezione di richieste di servizio Input e output attraverso stream metodi per ottenere stream di basso livello che possono essere utilizzati incapsulati in stream di livello più alto DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 2

Classe Socket Metodi public Socket(String host, int port) crea una socket di tipo stream e la connette alla porta port dell host host public InputStream getinputstream() public OutputStream getoutputstream() ritornano uno stream di input (output) per leggere dalla (scrivere sulla) socket public synchronized void setsotimeout(int timeout) imposta un timeout per le operazioni di lettura dalla socket (0 = attesa infinita) public synchronized void close() chiude la socket Anche java.net.datagramsocket per connessioni di tipo datagram DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 3 Classe ServerSocket Metodi public ServerSocket(int port) crea una socket server sulla porta port, che accetta fino a 50 richieste di servizio se port = 0, viene scelta una porta libera public ServerSocket(int port, int backlog, InetAddress bindaddr) crea una socket server sulla porta port, collegata all indirizzo bindaddr ed accetta fino a backlog richieste di servizio public Socket accept() mette la socket in condizioni di ascolto, in attesa di richieste di connessione; restituisce una socket per colloquiare con il richiedente public synchronized void close() chiude la socket DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 4

Implementazione di un server HTTP Entità 1. richiesta 2. risposta 3. server 4. thread che esegue il servizio (per avere concorrenza) 5. client Classi 1. Request 2. Answer 3. ServerHTTP 4. ServerThread 5. ClientHTTP Definizioni di costanti classe HTTP Classi inserite nel package serverhttp DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 5 Definizione di costanti public class HTTP // porta su cui il server è in ascolto static final int HTTP_PORT = 5557; // protocolli static final int HTTP = 0; static final int FTP = 1; static final int TELNET = 2; static final int NNTP = 3; // comandi HTTP static final int GET = 0; static final int IF_NOT_MODIFIED = 1; // risposte HTTP static final int FILE_NOT_FOUND = 0; static final int FILE_NOT_MODIFIED = 1; static final int REQ_OK = 2; // dimensione del buffer static final int PACCHETTO = 100; DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 6

Richiesta e risposta public class Request implements java.io.serializable public int protocol; public int request; public String nomefile; public Request(int p, int r, String n) protocol = p; request = r; nomefile = n; public class Answer implements java.io.serializable public int answer; public long dim_file; public Answer(int a, long d) answer = a; dim_file = d; DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 7 Server HTTP - 1 import java.io.*; import java.net.*; public class ServerHTTP static final int MAX_REQ = 5; public static void main(string args[]) try // crea e connette la socket ServerSocket so = new ServerSocket(HTTP.HTTP_PORT, MAX_REQ); System.out.print("Server HTTP: inizializzato sulla porta "); System.out.println(so.getLocalPort()); DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 8

Server HTTP - 2 while(true) // si mette in ascolto Socket newso = so.accept(); System.out.println("Server HTTP: ricevuta richiesta"); // esegue un thread in modo parallelo new ServerThread(newso).start(); catch (IOException e) System.out.println("ERRORE: " + e); // class ServerHTTP DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 9 import java.io.*; import java.net.*; class ServerThread extends Thread private Socket s; private Request richiesta; private Answer risposta; public ServerThread(Socket s) this.s = s; Esecutore del servizio - 1 public void run() byte buffer[] = new byte[http.pacchetto]; try // ottiene gli stream di I/O dalla socket ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream()); DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 10

Esecutore del servizio - 2 // legge la richiesta richiesta = (Request)ois.readObject(); System.out.println(richiesta.toString()); switch (richiesta.protocol) case HTTP.HTTP: switch (richiesta.request) case HTTP.GET: File f = new File(richiesta.nomefile); // controlla che il file esista if (f.exists()) Answer risposta = new Answer(HTTP.REQ_OK, f.length()); oos.writeobject(risposta); oos.flush(); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); FileInputStream fis = new FileInputStream(f); DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 11 Esecutore del servizio - 3 // manda il contenuto del file for (int i=0; i<(risposta.dim_file/http.pacchetto); i++) fis.read(buffer); dos.write(buffer); fis.read(buffer, 0, (int)risposta.dim_file%http.pacchetto); dos.write(buffer, 0, (int)risposta.dim_file%http.pacchetto); fis.close(); else // il file non esiste Answer risposta = new Answer(HTTP.FILE_NOT_FOUND, 0); oos.writeobject(risposta); break; // GET DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 12

Esecutore del servizio - 4 case HTTP.IF_NOT_MODIFIED: // altre istruzioni... break; //IF_NOT_MODIFIED // switch request // switch protocol s.close(); //chiudo socket catch (Exception e) System.out.println("ERRORE: "+e); // run() // class ServerThread DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 13 import java.io.*; import java.net.*; Client - 1 public class ClientHTTP public static void main(string args[]) String nomeurl, nomeserver, nomefile; try while (true) System.out.print("Dammi l indirizzo URL: "); BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); nomeurl = r.readline(); nomeserver = nomeurl.substring(0, nomeurl.indexof( / )); nomefile = nomeurl.substring(nomeurl.indexof( / ) + 1); System.out.println("Server: " + nomeserver + "; file: " + nomefile); DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 14

Client - 2 // crea una socket e la connette a host e porta Socket s = new Socket(nomeserver, HTTP.HTTP_PORT); // ottiene gli stream di I/O dalla socket ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream()); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); // invia la richiesta Request richiesta = new Request(HTTP.HTTP, HTTP.GET, nomefile); oos.writeobject(richiesta); // legge la risposta Answer risposta = (Answer)ois.readObject(); if (risposta.answer == HTTP.REQ_OK) byte buffer[] = new byte[http.pacchetto]; // ottiene un stream di dati in input DataInputStream dis = new DataInputStream(s.getInputStream()); DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 15 Client - 3 // legge i byte in arrivo dalla socket for (int i=0; i<(risposta.dim_file/http.pacchetto); i++) dis.read(buffer); System.out.print(new String(buffer)); dis.read(buffer, 0, (int)risposta.dim_file%http.pacchetto); System.out.println(new String(buffer, 0, (int)risposta.dim_file%http.pacchetto)); else System.out.println("File " + nomefile + " non trovato"); s.close(); // fine while catch (Exception e) System.out.println("ERRORE: " + e); // class ClientHTTP DU Teledidattico- Reti di Calcolatori III Esercitazione Server HTTP in Java - 16