Laboratorio di reti I: Il pacchetto java.net



Documenti analoghi
Telematica II 12. Esercitazione/Laboratorio 4

Java Socket LSO 2008

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

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

Socket & RMI Ingegneria del Software - San Pietro

Reti di Telecomunicazione Lezione 6

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

Dal protocollo IP ai livelli superiori

Cenni di programmazione distribuita in C++ Mauro Piccolo

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

Transmission Control Protocol

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Inizializzazione degli Host. BOOTP e DHCP

Introduzione alle applicazioni di rete

appunti delle lezioni Architetture client/server: applicazioni client

Reti di Telecomunicazione Lezione 8

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

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

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

Modello client-server

Architettura Client-Server

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

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

Reti di Calcolatori. Il Livello delle Applicazioni

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

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

Protocolli applicativi: FTP

P2-11: BOOTP e DHCP (Capitolo 23)

ARP (Address Resolution Protocol)

Parte II: Reti di calcolatori Lezione 10

Applicazioni distribuite

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

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

Reti di Calcolatori

Altri tipi di connessione

HTTP adaptation layer per generico protocollo di scambio dati

Reti di Calcolatori. Il software

URI. Introduzione. Pag. 1

InterNet: rete di reti

Parte II: Reti di calcolatori Lezione 12

Indirizzi Internet e. I livelli di trasporto delle informazioni. Comunicazione e naming in Internet

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

I Socket. Laboratorio Software M. Grotto R. Farina

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

1 Progetto di laboratorio di reti I

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Manuale Utente. Gestione Richieste supporto Data Warehouse. Della Ragioneria Generale dello Stato. Versione 1.0. Roma, Ottobre 2015

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

ARCHITETTURA DI RETE FOLEGNANI ANDREA

Client - Server. Client Web: il BROWSER

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

1) GESTIONE DELLE POSTAZIONI REMOTE

SOMMARIO... 3 INTRODUZIONE...

INFORMATICA DISTRIBUITA. lez 4 Livello applicazione

Programmazione dei socket con TCP #2

BREVE GUIDA ALL ATTIVAZIONE DEL SERVIZIO DDNS PER DVR SERIE TMX

Networking. Mauro Migliardi Ph. D.

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

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

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

Firewall e Abilitazioni porte (Port Forwarding)

Tesina esame Programmazione di Sistemi Mobile realizzata da Roberto Giuliani matricola Sockets e DatagramSocket

Protocolli di Comunicazione

Approfondimento di Marco Mulas

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

DNS-Tunneling. Reference to. Ettore di Giacinto Luca Montunato

Introduzione alla programmazione in C

FRANCESCO MARINO - TELECOMUNICAZIONI

Reti di Telecomunicazione Lezione 7

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

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

Gestione degli indirizzi

Esercizio data base "Biblioteca"

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2015

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

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

Corso di Reti di Calcolatori T

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

flusso delle informazioni... 2 password... 3 password/ inserimento di una nuova richiesta... 4 le condizioni di vendita... 6

Gestione degli indirizzi

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

1. Manuale d uso per l utilizzo della WebMail PEC e del client di posta tradizionale

Utilizzo dei Server DNS e relative implicazioni

MAGAZZINO FISCALE (agg. alla rel )

File, Modifica, Visualizza, Strumenti, Messaggio

Esercitazione [6] Client/Server con Socket

Manuale per la configurazione di un account di PEC in Outlook 2003.

Informatica per la comunicazione" - lezione 8 -

Come leggere ed interpretare la letteratura scientifica e fornire al pubblico informazioni appropriate sui farmaci

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2013/2014

Applicazioni web. Parte 5 Socket

Reti diverse: la soluzione nativa

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Prova in itinere - Rete Internet (ing. Giovanni Neglia) Mercoledì 23 Maggio 2007, ore 15.00

Manuale per la configurazione di un account di PEC in Mozilla.

Transcript:

Laboratorio di reti I: Il pacchetto java.net Stefano Brocchi brocchi@dsi.unifi.it 5 novembre, 2008 Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 1 / 43

Concetti di base Modello a strati di una rete Una rete può essere modellata con una serie di strati dove ognuno rappresenta un diverso livello di astrazione Proposto nel 1995 il modello OSI: Applicazione Presentazione Sessione Trasporto Rete Data Link Fisico Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 2 / 43

Concetti di base Modello a strati di una rete In fase di trasmissione le informazioni dovrebbero in qualche modo passare per ogni livello prima di essere passate al livello successivo Le implementazioni dei vari livelli dovrebbero essere indipendenti tra di loro Nelle reti reali non sempre queste direttive vengono seguite rigidamente Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 3 / 43

Concetti di base Modello a strati di una rete Per le comunicazioni in rete viene utilizzato il modello TCP/IP: HTTP SMTP FTP TCP UDP IP Il protocollo IP (Internet Protocol) corrisponde al livello di rete del modello osi; per lo smistamento dei pacchetti ad ogni host viene assegnato un indirizzo detto indirizzo IP Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 4 / 43

Concetti di base Indirizzi IP Un indirizzo IP identifica un host con quattro byte rappresentati come numeri da 0 a 255 Es. 72.14.221.104 Il nuovo protocollo IPv6 in via di introduzione identificherà una macchina con indirizzi a 16 byte (128 bit) Alcuni indirizzi hanno significati particolari 127.0.0.1 rappresenta l host locale (localhost) 192.168.*.* sono indirizzi riservati per reti locali (LAN) Un host può essere identificato per comodità tramite una stringa (es. www.google.it). Per ottenere l indirizzo (o uno degli indirizzi) ad esso associato viene utilizzato il servizio di DNS (Domain Name System) Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 5 / 43

Concetti di base Paradigmi per la programmazione di reti Il principale paradigma che vedremo è quello client-server: un host detto client richiede un servizio ad un altro detto server che computa un risultato e lo manda in risposta al client L esempio più semplice è la richiesta di una pagina web Altri possibili paradigmi sono: Remote evaluation: un host manda del codice ad un altro richiedendo che questo venga eseguito Code on demand: un host richiede il codice per eseguire una determinata operazione Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 6 / 43

Il pacchetto java.net Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 7 / 43

La classe InetAddress Il pacchetto java.net La classe InetAddress La classe InetAddress rappresenta un indirizzo di rete Non ha costruttori standard; gli oggetti InetAddress possono essere ottenuti tramite i seguenti metodi statici InetAddress getlocalhost() Restituisce l indirizzo dell host locale InetAddress getbyaddress(byte[] addr) Restituisce l indirizzo rappresentato dai byte passati InetAddress getbyname(string host) InetAddress[] getallbyname(string host) Restituiscono uno o tutti gli indirizzi associato all host specificato, ottenuti interrogando il DNS Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 8 / 43

La classe InetAddress Uso di InetAddress La classe InetAddress offre vari metodi per ottenere informazioni sull indirizzo rappresentato tra cui String gethostaddress() Restituisce l indirizzo IP dell host locale in forma di stringa byte[] getaddress() Restituisce l indirizzo IP dell host locale in forma di vettore di byte String gethostname() Restituisce il nome dell indirizzo rappresentato Gli oggetti InetAddress potranno inoltre essere utilizzati come parametri per metodi che creano una connessione Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 9 / 43

Comunicazione tramite connessioni TCP Il protocollo TCP Il protocollo TCP offre numerose funzionalità tra cui Garanzia di consegna: se un pacchetto non arriva a destinazione questo viene rilevato automaticamente tramite un sistema di acknowledgement e timeout e questo viene ritrasmesso finchè non raggiunge il mittente Ordinamento dei pacchetti: nel caso in cui i pacchetti arrivino al destinatario in ordine diverso da quello di invio il protocollo esegue un riordinamento; in questo modo la lettura e scrittura su di un canale risulta sequenziale come sugli altri stream di dati Grazie a tali garanzie, a livello applicazione possiamo evitare di preoccuparci di molte problematiche sulla consegna di pacchetti Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 10 / 43

Le socket Il pacchetto java.net Comunicazione tramite connessioni TCP Una socket è un astrazione per un estremo di una comunicazione TCP/IP I dati per la creazione di una socket sono l indirizzo IP dell host con il quale si vuole comunicare e una porta di comunicazione Una porta è un intero da 1 a 65.535 (2 16 1) che verrà utilizzato in fase di comunicazione per distinguere le varie connessioni Le porte tra 1 e 1023 sono considerate riservate per applicazioni e protocolli noti (HTTP:80, FTP:21, SMTP:25) Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 11 / 43

Comunicazione tramite connessioni TCP Le socket: creazione di una connessione Una connessione tra un client ed un server tramite socket viene creata tramite i seguenti passi: Un server resta in attesa di connessioni su una determinata porta Un client richiede una connessione al server sulla porta corrispondente Il server accetta la connessione dando inizio alla comunicazione Quando un server accetta una connessione da un client la comunicazione viene rediretta su di un altra porta del server in modo che questo possa rimettersi in ascolto per altre connessioni sulla stessa porta Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 12 / 43

Comunicazione tramite connessioni TCP Classi Socket e ServerSocket In Java le classi adibite alla gestione delle socket sono Socket e ServerSocket La classe ServerSocket serve per permettere ad un server di rimanere in attesa di una connessione Vediamo innanzitutto un esempio di funzionamento delle classi; vedremo tutti i loro metodi in dettaglio più avanti Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 13 / 43

Comunicazione tramite connessioni TCP Uso di socket: creazione di una ServerSocket Innanzitutto un server deve creare una ServerSocket ed attendere connessioni in ingresso: ServerSocket ss = new ServerSocket(port); Socket s = ss.accept(); Al momento della creazione viene specificata la porta su cui stare in attesa; con l istruzione accept() il server resta in ascolto Dal momento in cui un client si connette, al server viene restituito un oggetto di tipo Socket da utilizzare per la comunicazione Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 14 / 43

Comunicazione tramite connessioni TCP Uso di socket: connessione ad un server Un client deve quindi connettersi al server in ascolto Socket s = new Socket(ipAddress, port); Con questa sitruzione il client si connette al server. L oggetto ipaddress deve essere l InetAddress corrispondente al server; l intero port deve essere la porta sulla quale il server è in ascolto Dalla JDK 1.4, si può ottenere alternativamente una socket connessa in due passi tramite le istruzioni Socket s = new Socket(); s.connect(new InetSocketAddress(ipAddress, port)); Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 15 / 43

Comunicazione tramite connessioni TCP Uso di socket: comunicazione Una volta che una socket è connessa, sia essa lato client o lato server (ottenuta dal metodo accept()) da essa devono venire estratti gli stream per la comunicazione InputStream in = s.getinputstream(); OutputStream out = s.getoutputstream(); A questo punto la comunicazione può avvenire tramite le solite tecniche di gestione degli stream Alla terminazione della comunicazione sarà necessario chiudere la socket s.close(); Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 16 / 43

Comunicazione tramite connessioni TCP Uso di socket: esempio Vediamo per un esempio il codice di un server che attende connessioni su di una determinata porta e stampa su schermo i dati che gli vengono inviati ServerSocket ss = new ServerSocket(port); Socket s = ss.accept(); InputStream in = s.getinputstream(); int readbyte = in.read(); while (readbyte >= 0) { System.out.print((char)readbyte); readbyte = in.read(); } in.close(); s.close(); ss.close(); Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 17 / 43

Comunicazione tramite connessioni TCP Uso di socket: esempio Vediamo simmetricamente del codice per l invio di dati tramite TCP Se utilizzato per comunicare con un server come quello appena descritto questo codice potrebbe essere usato per la stampa di messaggi in remoto String message = "Messaggio di prova"; Socket s = new Socket(ip, port); OutputStream out = s.getoutputstream(); out.write(message.getbytes()); out.close(); s.close(); Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 18 / 43

Comunicazione tramite connessioni TCP Il timeout Nelle comunicazioni di rete può succedere che alcuni host non rispondano per un tempo indefinitamente lungo; in questi casi un istruzione di lettura bloccherebbe il programma Per risolvere questo problema si può impostare un valore detto di timeout: se dopo una certa quantità di tempo l istruzione di IO non è terminata, questa viene interrotta e viene generata una SocketTimeoutException Il timeout di una socket può essere impostato tramite il metodo setsotimeout(int timeout); si può impostare il timeout anche in una server socket con l omonimo metodo per evitare che una accept() resti in attesa indefinitamente Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 19 / 43

Comunicazione tramite connessioni TCP Metodi di Socket Riassumendo i principali metodi della classe Socket sono: Socket() per la creazione di una socket non ancora collegata (disponibile dalla JDK1.4) Socket(InetAddress address, int port) per la creazione di una socket connessa all indirizzo address sulla porta port getinputstream(), getoutputstream() per ottenere gli stream in ingresso ed in uscita della connessione close() per chiudere la connessione setsotimeout(int time) per impostare un valore di timeout connect(socketaddres endpoint) e connect(socketaddres endpoint, int timeout) per connettersi ad un determinato host, specificando eventualmente un valore di timeout (disponibile dalla JDK1.4) Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 20 / 43

Comunicazione tramite connessioni TCP Metodi di Socket Altri metodi utili di Socket: isconnected() ritorna true se la socket è ancora connessa Esistono vari metodi per l interrogazione di proprietà del socket, tra cui getport(), getlocalport(), getinetaddress(), getlocaladdress(), getsotimeout()... Quasi tutti i metodi di Socket lanciano eccezioni derivate da IOException in caso di varie situazioni di errore (per es. host non trovato o irraggiungibile, timeout scaduto) Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 21 / 43

Comunicazione tramite connessioni TCP Metodi di ServerSocket I principali metodi della classe ServerSocket sono: ServerSocket(int port), costruttore per la creazione di una ServerSocket associata ad una determinata porta Socket accept() per stare in ascolto ed ottenere una la Socket di un client che richiede la connessione setsotimeout(int time) per impostare un valore di timeout Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 22 / 43

Esercizio Esercizio Realizzare un sistema per la distribuzione di file; un server dovrà stare in ascolto e mandare un determinato file ai client che ne fanno richiesta. Questi salveranno il file in locale. Evitare eventuali situazioni di blocco causate da una mancata risposta tramite l uso di timeout Progettare o realizzare le seguenti funzionalità: Rendere possibile la gestione contemporanea di più client da parte del server in modo da fornire un servizio continuo. Questo si può ottenere creando al momento del collegamento un thread per la gestione di ogni client e rimettendo il server immediatamente in ascolto Mandare ai client un qualsiasi file richiesto presente sul server (o nella cartella di lavoro). In questo caso al momento della connessione il server dovrà aspettare che il client mandi la sua richiesta per poi rispondere con il file appropriato. Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 23 / 43

Comunicazione tramite UDP Il protocollo UDP Il protocollo UDP ha caratteristiche diverse dal protocollo TCP UDP non è orientato alla connessione: tra due host non si crea uno stream stabile L avvio di una comunicazione avviene senza handshaking La consegna dei pacchetti non è garantita; al contrario i controlli sull integrità vengono eseguiti come in TCP L ordine di arrivo dei pacchetti non è necessariamente lo stesso di invio La comunicazione è perlopiù unidirezionale Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 24 / 43

Comunicazione tramite UDP Il protocollo UDP Uno dei principali vantaggio di UDP è che grazie alla sua semplicità offre un servizio molto rapido. In particolare: Una comunicazione può iniziare molto rapidamente grazie all assenza di handshaking (per questo viene spesso utilizzato per DNS) Richiede una minore occupazione di banda, soprattutto nella gestione di pacchetti piccoli, grazie ad un intestazione molto breve La banda occupata è minimale grazie anche all assenza di servizi per l ordinamento dei pacchetti o per la gestione della congestione di rete forniti invece da TCP Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 25 / 43

Comunicazione tramite UDP Il protocollo UDP Il protocollo UDP può essere inoltre utile nei seguenti casi: Quando possiamo permetterci la perdita di alcuni pacchetti (es. streaming di una videoconferenza) Quando possiamo gestire facilmente un ordine di arrivo dei pacchetti diverso da quello di invio Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 26 / 43

Comunicazione tramite UDP La classe DatagramPacket La classe DatagramPacket rappresenta un pacchetto UDP Mette a disposizione costruttori per la ricezione di pacchetti tra cui public DatagramPacket(byte[] buf, int length)... dove buf rappresenta l array dove verranno messi i byte del pacchetto e length il numero di byte da leggere, e costruttori per l invio come public DatagramPacket(byte[] buf, int length, InetAddress address, int port)... dove vengono specificati indirizzo e porta di destinazione, oltre al numero length di byte da inviare Esistono altri costruttori che permettono anche di specificare un offset, cioè un punto del vettore b dove iniziano i byte da inviare o ricevere Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 27 / 43

La classe DatagramPacket Comunicazione tramite UDP La classe DatagramPacket mette a disposizione vari metodi per accedere alle informazioni contenute nel pacchetto rappresentato: byte[] getdata(), int getlength() Utili ad ottenere il vettore di byte contenuti e la lunghezza del pacchetto; da usare dopo la ricevione del pacchetto InetAddress[] getaddress(), int getport() Da usare per ottenere indirizzo e porta dell host remoto che ha mandato o ricevuto il pacchetto void setaddress(inetaddress addr), void setport(int p), void setdata(byte[] b), void setlength(int l) Per impostare i vari campi del pacchetto Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 28 / 43

La classe DatagramSocket Comunicazione tramite UDP La trasmissione di pacchetti UDP avviene tramite la classe DatagramSocket Due possibili costruttori sono: public DatagramSocket() Per la creazione di una DatagramSocket associata ad una qualsiasi porta libera del sistema public DatagramSocket(int port) Per la creazione di una DatagramSocket in ascolto sulla porta port specificata Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 29 / 43

Comunicazione tramite UDP La classe DatagramSocket: invio e ricezione I due metodi per l invio e la ricezione di pacchetti sono send e receive public void send(datagrampacket d) Questo metodo invia il pacchetto UDP specificato; le informazioni sull host di destinazione sono contenute nel pacchetto public void receive(datagrampacket d) Questo metodo resta in ascolto di un pacchetto UDP; le informazioni sul numero massimo di byte da ricevere sono, di nuovo, contenute nel pacchetto Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 30 / 43

Comunicazione tramite UDP La classe DatagramSocket: altri metodi Altri metodi offerti dalla classe DatagramSocket sono: public void connect(inetaddress address, int port) Associa la socket ad un indirizzo ed una porta imponendo che i pacchetti possano essere inviati e ricevuti solo da tale host. Non effettua una connessione nel vero senso del termine public void disconnect() Annulla l effetto di una precedente operazione connect public void setsotimeout(int time) Specifica un tempo di timeout per l operazione di ricezione Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 31 / 43

Comunicazione tramite UDP Esempio: invio di pacchetti UDP Vediamo un esempio di codice per l invio di un pacchetto UDP: DatagramPacket dp; byte[] msg = "Messaggio di prova".getbytes(); dp = new DatagramPacket(msg, msg.length, ip, port); DatagramSocket ds = new DatagramSocket(); ds.send(dp); Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 32 / 43

Comunicazione tramite UDP Esempio: ricezione di pacchetti UDP Vediamo il corrispondente codice per la ricezione di pacchetti UDP: DatagramSocket ds = new DatagramSocket(port); byte[] in = new byte[1024]; DatagramPacket dp = new DatagramPacket(in, 1024); ds.receive(dp); System.out.print("Received: "); System.out.println( new String(dp.getData(), 0, dp.getlength())); La stampa dei dati ricevuti come stringa ha senso in quest esempio in quanto sappiamo che i dati inviati rappresentano, appunto, una stringa Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 33 / 43

Comunicazione tramite UDP Problematiche di UDP Notare che a causa della sua semplicità UDP ci offre meno controllo sul flusso di dati, e spesso può essere necessario adottare delle tecniche o dei presupposti a livello applicazione per garantire il funzionamento. Due problematiche per esempio sono le seguenti Non possiamo sapere direttamente tramite il protocollo se un determinato pacchetto è stato ricevuto. L invio ad un host inesistente o ad una porta errata non produce alcuna situazione di errore Nel caso il pacchetto inviato fosse stato di dimensione superiore alla dimensione specificata (nell esempio 1024 byte) i byte in eccesso sarebbero andati persi. Di nuovo, nessuna situazione di errore verrebbe segnalata Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 34 / 43

Uso di URL e del protocollo HTTP Concetto di URL Un URL (Uniform Resource Locator) è un identificatore di una risorsa nel web; la sua sintassi è protocollo://host[:porta][percorso][file][?query][#pos] Alcuni esempi di URL: http://www.google.it:80/search?q=url http://www.unifi.it/notizie/news/#archivi http://www.dsmi.unisi.it/newsito/index.php Gli URL vengono utilizzati per la comunicazione tramite protocolli ad alto livello come http o ftp. Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 35 / 43

Campi di un URL Il pacchetto java.net Uso di URL e del protocollo HTTP I campi dell URL specificano varie caratteristiche della risorsa rappresentata: protocollo E il protocollo da utilizzare per effettuare la richiesta (es. http, ftp, file) host Il nome dell host remoto, anche come indirizzo IP (es. www.google.it o 72.14.221.104) porta La porta sul quale connettersi; per http il valore di default è la porta 80 percorso Il percorso sul quale si trova la risorsa sul server file Il file corrispondente alla risorsa sul server query Rappresenta una serie di parametri da passare insieme alla richiesta sec Indica un riferimento ad un determinato punto del documento Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 36 / 43

Uso di URL e del protocollo HTTP La classe URL La classe URL rappresenta un Uniform Resource Locator Può essere costruita tramite la rappresentazione dell URL come stringa: URL(String url) Come per i file, è possibile specificare degli URL relativi ad un URL di partenza URL(URL context, String url) Per esempio se si combina l URL padre http://www.mat.unisi.it/newsito/index.php con l URL relativa ricerca.php si ottiene l URL http://www.mat.unisi.it/newsito/ricerca.php Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 37 / 43

Uso di URL e del protocollo HTTP La classe URL A disposizione nella classe URL vari metodi per estrarre i suoi campi: getprotocol(), gethost(), getport(), getfile(), getpath(), getref(), getquery() Al momento della sua creazione un oggetto URL non ha ancora effettuato nessuna operazione di connessione remota La connessione avviene tramite il metodo public URLConnection openconnection() L oggetto URLConnection restituito rappresenta, appunto, una connessione ad un URL A seconda del protocollo verrà restituito un certo sottotipo di URLConnection; nel caso di http si otterrà una HttpURLConnection Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 38 / 43

Uso di URL e del protocollo HTTP La classe URLConnection Una volta ottenuta da classe URLConnection connessa si può dare inizio ad una comunicazione ottenendo gli stream in ingresso ed in uscita tramite i metodi getinputstream() e getoutputstream() Esistono vari metodi per interrogare le proprietà dell oggetto riferito: getcontentlength(), getcontenttype(), getexpiration(), getheaderfield(string name) Per impostare i vari campi della richiesta da inviare si può usare il metodo setrequestproperty(string key, String property) Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 39 / 43

Uso di URL e del protocollo HTTP La classe URLConnection Dalla JDK 1.5, è possibile utilizzare inoltre i seguenti metodi per manipolare il timeout in fase di lettura: setreadtimeout(int timeout), getreadtimeout() Se non ci interessa utilizzare le funzionalità della classe URLConnection ma vogliamo solo l InputStream associato per ottenere il contenuto dell URL, possiamo ottenere quest oggetto direttamente tramite il metodo di URL openstream() Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 40 / 43

Uso di URL e del protocollo HTTP Esempio: download di una pagina HTML Il seguente codice scarica una pagina web e la salva come un file locale URL source = new URL("http://java.sun.com"); InputStream in = new BufferedInputStream( source.openstream()); OutputStream out = new BufferedOutputStream( new FileOutputStream(dest)); int readbyte = in.read(); while (readbyte >= 0) { out.write(readbyte); readbyte = in.read(); } in.close(); out.close(); Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 41 / 43

Uso di URL e del protocollo HTTP La classe HttpURLConnection Nel caso di un URL che utilizza il protocollo HTTP si può usufruire delle funzionalità aggiuntive che questa offre rispetto alla classe URLConnection Il metodo getresponsecode() restituisce il codice di ritorno HTTP. I vari codici sono contenuti come campi statici nella classe. Alcuni di essi sono: 200 Ok 3xx Redirezione ad un altra pagina 403 Accesso proibito 404 Non trovato Il metodo setfollowredirects(boolean fr) serve per indicare se le redirezioni ad un altra pagina indicate nella risposta vadano seguite automaticamente o meno Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 42 / 43

Esercizio (2) Esercizio (2) Realizzare un programma che scarichi su disco una serie di file dal web tramite protocollo HTTP L elenco dei file da scaricare viene letto da un file di testo contenente un elenco di URL Per massimizzare la banda utilizzata ed ottimizzare i tempi eseguire il download dei vari file con più thread che agiscono in parallelo Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 43 / 43