Applicazioni web. Parte 5 Socket



Похожие документы
(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

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

Architettura Client-Server

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Applicazioni distribuite

Telematica II 12. Esercitazione/Laboratorio 4

Socket & RMI Ingegneria del Software - San Pietro

appunti delle lezioni Architetture client/server: applicazioni client

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Introduzione alle applicazioni di rete

Dal protocollo IP ai livelli superiori

appunti delle lezioni Architetture client/server: applicazioni server

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

Parte II: Reti di calcolatori Lezione 10

Informatica per la comunicazione" - lezione 8 -

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

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

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

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

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Reti di Telecomunicazione Lezione 6

Programmare con le Socket TCP

Programmazione dei socket con TCP #2

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

Corso di Reti di Calcolatori L-A

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

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Applicazioni web centrati sui dati (Data-centric web applications)

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

Siti web centrati sui dati (Data-centric web applications)

Controllo Winsock di Visual Basic

InterNet: rete di reti

Reti di Telecomunicazione Lezione 8

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

INFORMATICA DISTRIBUITA. lez 4 Livello applicazione

Transmission Control Protocol

Cenni di programmazione distribuita in C++ Mauro Piccolo

Standard di comunicazione

Reti di Telecomunicazione Lezione 7

Reti di Calcolatori:

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

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

Reti di calcolatori. Reti di calcolatori

Reti di Calcolatori. Vantaggi dell uso delle reti. Cosa è una rete? Punto di vista logico: sistema di dati ed utenti distribuito

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

Protocolli applicativi: FTP

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

INTERNET e RETI di CALCOLATORI A.A. 2011/2012 Capitolo 4 DHCP Dynamic Host Configuration Protocol Fausto Marcantoni fausto.marcantoni@unicam.

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

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

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

Corso sul linguaggio Java

Gestione delle Eccezioni

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Inizializzazione degli Host. BOOTP e DHCP

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

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

Reti di Calcolatori. Il software

Le Reti Informatiche

Protocolli di Comunicazione

Java Remote Method Invocation

Altri tipi di connessione

Come funziona internet

Reti di Calcolatori. Il Livello delle Applicazioni

Esercizio 2. Client e server comunicano attraverso socket TCP

Topologia delle reti. Rete Multipoint: ogni nodo è connesso agli altri tramite nodi intermedi (rete gerarchica).

RMI. Java RMI RMI. G. Prencipe

GESTIONE DEI PROCESSI

Programmazione di rete in Java

Networking. Mauro Migliardi Ph. D.

PARTE 1 richiami. SUITE PROTOCOLLI TCP/IP ( I protocolli di Internet )

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Prof. Filippo Lanubile

Corso di Informatica Modulo T3 B2 - Database in rete

CORSO DI RETI SSIS. Lezione n.2. 2 Novembre 2005 Laura Ricci

OSOR. Applicazioni di Rete

Elementi sull uso dei firewall

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

I Socket. Laboratorio Software M. Grotto R. Farina

13. Chain of Responsibility

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

La sicurezza nel Web

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Parte II Lezione 5

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

Gestione degli indirizzi

Транскрипт:

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it

Protocolli Internet I computer collegati ad Internet comunicano tra loro usando il Transmission Control Protocol (TCP) o lo User Datagram Protocol (UDP) Quando si scrivono programmi Java che comunicano sulla rete, si programma a livello di applicazione Si usano le classi del package java.net Permettono di comunicare sulla rete In maniera indipendente dalla piattaforma Non c è bisogno di preoccuparsi dei dettagli del trasporto (TCP o UDP) Per decidere quali classi Java usare in un programma, bisogna conoscere le differenze tra TCP e UDP 2

TCP TCP (Transmission Control Protocol) è un protocollo basato sulla connessione che garantisce un flusso di dati affidabile tra due computer Quando due applicazioni vogliono comunicare tra di loro in maniera affidabile 1. Stabiliscono una connessione 2. Inviano dati nei due sensi su di essa Analogo al fare una chiamata telefonica Come la compagnia telefonica, TCP garantisce: Che i dati inviati da un capo della connessione arrivino effettivamente all altro capo Nello stesso ordine in cui sono stati inviati Altrimenti, viene riportato un errore 3

TCP TCP fornisce un canale punto-a-punto per applicazioni che richiedono comunicazioni affidabili Hypertext Transfer Protocol (HTTP) File Transfer Protocol (FTP) Telnet L ordine in cui i dati sono inviati e ricevuti è critico per il funzionamento di queste applicazioni Quando si usa HTTP per leggere dati da una url, questi devono essere ricevuti nell ordine in cui sono inviati Altrimenti, si ottiene un file html confuso, un file zip corrotto o altre informazioni scorrette 4

UDP UDP (User Datagram Protocol) è un protocollo che invia pacchetti di dati indipendenti, chiamati datagram, da un computer ad un altro senza garanzia di consegna UDP non è basato sulla connessione come TCP Il protocollo UDP permette comunicazioni non garantite tra due applicazioni sulla rete Inviare un datagram è simile ad inviare una lettera tramite il servizio postale L ordine di consegna non è importante e non è garantito Ogni messaggio è indipendente da tutti gli altri 5

UDP Qualche applicazione può essere rallentata dall overhead aggiuntivo La connessione affidabile può invalidare completamente il servizio Servizio orario che invia l ora attuale ai suoi client, su richiesta Se il client perde un pacchetto, non ha alcun senso inviarlo di nuovo Al secondo tentativo, l ora sarà sbagliata nell istante in cui il client riceverà il pacchetto 6

Porte In linea di massima, un computer ha una singola connessione fisica alla rete Tutti i dati destinati ad un particolare computer arrivano attraverso la stessa connessione Tuttavia, i dati potrebbero essere indirizzati a applicazioni diverse in esecuzione sullo stesso computer Come fa il computer a sapere a quale applicazione inviare i dati? Tramite l uso delle porte 7

Porte I protocolli TCP e UDP usano le porte per mappare i dati in arrivo ad un particolare processo in esecuzione su un computer I dati trasmessi su Internet sono accompagnati da informazione di indirizzo che identifica il computer e la porta cui sono destinati Il computer è identificato dal suo indirizzo IP a 32 bit, che IP usa per consegnare i dati al giusto computer sulla rete Le porte sono identificate da un numero a 16 bit, che TCP e UDP usano per consegnare i dati alla giusta applicazione 8

URL URL è l acronimo di Uniform Resource Locator ed è un riferimento (un indirizzo) per una risorsa su Internet Il nome della risorsa è l indirizzo completo per la risorsa e dipende interamente dal protocollo usato. In HTTP include: Nome dell host Nome (o indirizzo) della macchina su cui risiede la risorsa Numero di porta Numero di porta a cui connettersi (tipicamente opzionale) Nome di file Percorso (virtuale) del file sulla macchina Frammento Riferimento ad un punto all interno della risorsa, di solito una locazione all interno di un file (di solito opzionale) http://www.ietf.org:80/rfc/rfc2732.txt 9

Creare URL In un programma Java, si può usare una stringa per istanziare un oggetto URL URL gamelan = new URL("http://www.gamelan.com/"); L oggetto URL creato sopra rappresenta una URL assoluta Una URL assoluta contiene tutte le informazioni necessarie per raggiungere la risorsa in questione 10

Altri costruttori di URL Si possono creare URL partendo da indirizzi relativi Un indirizzo relativo contiene informazioni sufficienti a raggiungere la risorsa solo nel contesto di una URL di base http://www.gamelan.com/pages/gamelan.game.html http://www.gamelan.com/pages/gamelan.net.html URL gamelan = new URL("http://www.gamelan.com/pages/"); URL game = new URL(gamelan, "Gamelan.game.html"); URL network = new URL(gamelan, "Gamelan.net.html"); Costruttori di URL più generici URL(URL baseurl, String relativeurl) URL gamelan = new URL("http", "www.gamelan.com", 80, "pages/gamelan.network.html"); 11

MalformedURLException Tutti i costruttori di URL generano una eccezione MalformedURLException se gli argomenti del costruttore fanno riferimento ad un protocollo nullo o sconosciuto Bisogna catturare e gestire questa eccezione racchiudendo il costruttore in un blocco try/catch try { URL myurl = new URL(...) catch (MalformedURLException e) {... // exception handler code here... 12

Cos è una socket Una socket è un punto terminale di una connessione a doppio senso tra due programmi collegati alla rete Una socket è associata ad un numero di porta in modo tale che il livello TCP possa identificare l applicazione cui i dati sono destinati 13

Richiesta di connessione Normalmente, una applicazione server gira su un computer specifico ed è legata ad uno specifico numero di porta Il server aspetta, in ascolto sulla socket, fino all arrivo di una richiesta di connessione da un client Il client conosce il nome della macchina su cui il server gira ed il numero di porta cui è associato Per fare una richiesta di connessione, il client prova a contattare il server sulla sua specifica macchina e porta 14

Connessione accettata Se tutto va bene, il server accetta la connessione All accettazione, il server ottiene una nuova socket associata ad un nuovo numero di porta in modo da poter continuare ad ascoltare sulla socket originale per altre richieste di connessione mentre soddisfa le richieste del client connesso 15

Connessione accettata Dal lato client, se la connessione viene accettata, viene creata una socket per comunicare col server Si noti che la socket sul lato client non è legata al numero di porta usato per contattare il server Piuttosto, al client è assegnato un numero di porta locale alla macchina su cui il client è eseguito Il client ed il server possono finalmente comunicare attraverso le rispettive socket 16

Classi Java Il package java.net della piattaforma Java fornisce una classe,, che implementa un lato della connessione a due sensi tra un programma Java ed un altro programma sulla rete si basa su una implementazione dipendente dalla piattaforma Ma nasconde all applicazione i dettagli del particolare sistema Usando la classe java.net. al posto di codice nativo, un programma Java può comunicare sulla rete in maniera indipendente dalla piattaforma Inoltre, java.net include la classe Server, che implementa una socket che un server può usare per mettersi in ascolto e accettare connessioni con i client 17

Client di esempio import java.io.*; import java.net.*; public class ReverseClient { public static void main(string[] args) { try { socket = new ("taranis", 4444); handleconnection(socket); catch (UnknownHostException e) { System.err.println("Don't know about host: taranis."); System.exit(1); catch (IOException e) { System.err.println("Couldn't connect to: taranis."); System.exit(1);... 18

Client di esempio... static void handleconnection( socket) { try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); String userinput; while ((userinput = stdin.readline())!= null) { out.println(userinput); System.out.println("reverse: " + in.readline()); out.close(); in.close(); socket.close(); catch (IOException e) { /* */ 19

Server di esempio import java.net.*; import java.io.*; public class ReverseServer { public static void main(string[] args) { Server server = null; boolean listening = true; try { server = new Server(4444); catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(1); while (listening) { try { socket = server.accept(); handleclient(socket); catch (IOException e) { System.err.println("Accept failed."); try { server.close(); catch (IOException e) { /* */... 20

Server di esempio... static void handleclient( socket) { try { PrintWriter out = new PrintWriter( socket.getoutputstream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); String inputline; while ((inputline = in.readline())!= null) { out.println(new StringBuffer(inputLine).reverse()); out.close(); in.close(); socket.close(); catch (IOException e) { /* */ 21

Client multipli import java.net.*; import java.io.*; public class ReverseMultiServer { public static void main(string[] args) { Server server = null; boolean listening = true; try { server = new Server(4444); catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(-1); while (listening) { try { socket = server.accept(); Thread t = new ReverseServerThread(socket); t.start(); catch (IOException e) { System.err.println("Accept failed."); try { server.close(); catch (IOException e) { /* */ 22

Client multipli import java.net.*; import java.io.*; public class ReverseServerThread extends Thread { private socket = null; public ReverseServerThread( socket) { super("reverseserverthread"); this.socket = socket; public void run() { ReverseServer.handleClient(socket); 23

Datagram Un datagram è un messaggio indipendente e autocontenuto inviato sulla rete il cui arrivo, istante d arrivo e contenuto non sono garantiti Il package java.net contiene classi che aiutano ad usare datagram per inviare e ricevere pacchetti sulla rete DatagramPacket Datagram Multicast Una applicazione può inviare e ricevere pacchetti di tipo datagram attraverso una datagram socket Inoltre, i datagram possono essere inviati a destinatari multipli, tutti in ascolto su una multicast socket 24

Datagram client import java.io.*; import java.net.*; import java.util.*; public class DatagramClient { public static void main(string[] args) throws IOException { // bind a datagram socket to any port Datagram socket = new Datagram(); // send request InetAddress address = InetAddress.getByName(args[0]); DatagramPacket pkt1 = new DatagramPacket(new byte[0], 0, address, 4445); socket.send(pkt1); // get response on the same socket (and port) DatagramPacket pkt2 = new DatagramPacket(new byte[80], 80); socket.receive(pkt2); // display response String received = new String(pkt2.getData()); System.out.println("Current date is: " + received); socket.close(); 25

Datagram server import java.io.*; import java.net.*; import java.util.*; public class DatagramServer { public static void main(string[] args) { Datagram socket = new Datagram(4445); while (true) { try { // receive request DatagramPacket pkt1 = new DatagramPacket(new byte[0], 0); socket.receive(pkt1); byte[] serverdate = new Date().toString().getBytes(); // get client s "address" and "port" from his own packet InetAddress clentaddress = pkt1.getaddress(); int clientport = pkt1.getport(); DatagramPacket pkt2 = new DatagramPacket(serverDate, serverdate.length, clentaddress, clientport); socket.send(pkt2); catch (IOException e) { e.printstacktrace(); socket.close(); 26