SlideShare a Scribd company logo
1 of 54
Download to read offline
java.net.*
CRS4 - http://www.crs4.it




                            Basic Network Tutorial


                                       aprile 2005




                                 Stefano Sanna - gerda@crs4.it
Agenda
                                Java e network programming
                            ●



                                Low-level programming, network
                            ●
CRS4 - http://www.crs4.it




                                programming e distributed computing
                                UDP e TCP
                            ●



                                Client e Server
                            ●



                                Applicazioni
                            ●




                                Bibliografia
                            ●



                                Conclusioni
                            ●




                                               Stefano Sanna - gerda@crs4.it
Java
CRS4 - http://www.crs4.it




                            Stefano Sanna - gerda@crs4.it
Protocol stack
CRS4 - http://www.crs4.it




                              Applicazione                          Applicazione
                             (HTTP, FTP...)                        (HTTP, FTP...)

                               Trasporto                            Trasporto
                            (UDP, TCP, RTP)                      (UDP, TCP, RTP)

                                 Rete                                     Rete
                                 (IP)                                     (IP)

                              Hardware                               Hardware




                                          Stefano Sanna - gerda@crs4.it
Protocolli di rete
                                E' importante conoscere i diversi protocolli
                            ●


                                a disposizione: caratteristiche e finalità, i
CRS4 - http://www.crs4.it




                                limiti, le potenzialità, l'affidabilità, la
                                robustezza, l'overhead introdotto, la
                                sicurezza, i requisiti di memoria e calcolo
                                La scelta del protocollo giusto deve essere
                            ●


                                fatta in base a:
                                    banda disponibile
                                –

                                    affidabilità della rete (wired/wireless)
                                –

                                    volume dei dati scambiati
                                –

                                    ...
                                –

                                                 Stefano Sanna - gerda@crs4.it
Tre livelli di sviluppo
                                L'evoluzione dei protocolli e delle
                            ●


                                infrastrutture di rete ha portato
CRS4 - http://www.crs4.it




                                “idealmente” a tre livelli distinti di
                                programmazione e sviluppo network-
                                oriented:

                                    Low-level Network Programming
                                –


                                    Network Programming
                                –


                                    Distributed Computing
                                –


                                               Stefano Sanna - gerda@crs4.it
Low-level network programming
                                Per low-level network programming
                            ●


                                intendiamo la possibilità di scambiare dati
CRS4 - http://www.crs4.it




                                primitivi e complessi attraverso stream su
                                trasporto TCP e UDP.
                                Attraverso le classi Socket e ServerSocket
                            ●


                                è possibile gestire la comunicazione
                                client/server per l'invio di byte[], tipi base,
                                oggetti serializzati
                                La logica di comunicazione è responsabilità
                            ●


                                del programmatore che dovrà prevedere
                                opportuni codici di controllo
                                              Stefano Sanna - gerda@crs4.it
Network Programming
                                Per network programming intendiamo
                            ●


                                l'utilizzo di uno o più protocolli applicativi,
CRS4 - http://www.crs4.it




                                che si occupano di gestire la logica di
                                comunicazione tra client e server
                                A seconda del protocollo scelto, il
                            ●


                                programmatore dispone di strumenti più o
                                meno complessi che nascondono i dettagli
                                implementativi della specifica
                                Esempi di protocolli applicativi: Telnet, FTP,
                            ●


                                HTTP, SSH, NFS, NTP...


                                              Stefano Sanna - gerda@crs4.it
Distributed Computing
                                Il distributed computing rappresenta la
                            ●


                                possibilità di delocalizzare l'elaborazione
CRS4 - http://www.crs4.it




                                sui nodi di una rete in modo trasparente
                                per il programmatore ed il codice
                                applicativo
                                Attraverso opportuni meccanisimi di
                            ●


                                binding, lookup e serializzazione di oggetti,
                                l'invocazione di metodi e l'accesso a
                                funzioni remote avviene come se risorse
                                fossero locali: la presenza della rete è
                                totalmente mascherata dalle librerie
                                applicative
                                             Stefano Sanna - gerda@crs4.it
Distributed Computing
                                Esempi di distributed computing sono:
                            ●


                                    Java RMI: permette l'invocazione remota di
                                –
CRS4 - http://www.crs4.it




                                    metodi in maniera trasparente per il
                                    programmatore. Oggetti locali e remoti sono
                                    trattati allo stesso modo
                                    CORBA: permette l'interoperabilità tra
                                –
                                    componenti software scritti in linguaggi diversi
                                    Web Service: usano l'invocazione remota di
                                –
                                    metodi attraverso scambio di documenti XML
                                    su protocollo HTTP
                                         XML-RPC
                                     ●


                                         SOAP
                                     ●




                                                   Stefano Sanna - gerda@crs4.it
Stream model
                                Il sistema di I/O di Java è basato sul
                            ●


                                modello a stream: opportuni oggetti
CRS4 - http://www.crs4.it




                                permettono di gestire i flussi di byte in
                                ingresso e in uscita
                                Il modello a stream permette una gestione
                            ●


                                omogenea delle sorgenti di dati, a
                                prescindere dal supporto fisico (file, rete,
                                porta seriale, link Bluetooth...)
                                Attraverso un insieme componibile di filtri
                            ●


                                (decorator) e adattatori è possibile
                                elaborare i byte in transito
                                             Stefano Sanna - gerda@crs4.it
Input/Output Stream
                                InputStream:
                            ●


                                     Gestisce i flussi di byte in ingresso
                                 –
CRS4 - http://www.crs4.it




                                     Fornisce facility di buffering elementari
                                 –

                                OutputStream:
                            ●


                                     Gestisce i flussi di byte in uscita (con buffering)
                                 –



                                DataSource                                              Applicazione



                                                                             Filter 2       Filter n
                                Input/Output Stream        Filter 1

                                                  Stefano Sanna - gerda@crs4.it
Data Stream
                                I tipi base quali numeri interi, numeri in
                            ●


                                virgola mobile, valori logici e stringhe
CRS4 - http://www.crs4.it




                                (ASCII, Unicode, UTF) sono codificati con
                                più byte (non sempre indipendenti dalla
                                piattaforma)
                                Al fine di rendere la trasmissione di tali dati
                            ●


                                trasparente rispetto alla effettiva codifica
                                (si pensi alla variabilità del numero di bit di
                                un valore numerico intero) si utilizzano i
                                DataStream, che offrono i metodi per
                                leggere/scrivere int, short, long, float,
                                double, String...
                                              Stefano Sanna - gerda@crs4.it
Gestione caratteri: reader
                                L'introduzione di specifiche quali Unicode
                            ●


                                (1.0 e 2.0) e UTF-8 ha portato alla
CRS4 - http://www.crs4.it




                                necessità di trattare in maniera dedicata il
                                trasferimento di stream di caratteri: non è
                                garantita, infatti, la corrispondenza
                                “classica” 1byte == 1char!       :-(

                                Reader e Writer sono gli strumenti utilizzati
                            ●


                                da Java per accedere a flussi di caratteri
                                indipendentemente dalla codifica utilizzata


                                             Stefano Sanna - gerda@crs4.it
Buffering
                                Alcuni protocolli si basano su scambio
                            ●


                                sequenze di stringhe separate da CR+LF: il
CRS4 - http://www.crs4.it




                                protocollo HTTP, ad esempio, descrivere le
                                intestazioni (header) delle HTTP Request e
                                Response

                                La gestione dei flussi “per righe” può
                            ●


                                essere fatta agevolmente attraverso l'uso
                                di classi quali il BufferedReader, che offre
                                metodi per la lettura “line by line”


                                             Stefano Sanna - gerda@crs4.it
Low-level network programming
                                Introduciamo ora i concetti base per lo
                            ●


                                sviluppo di applicazioni che utilizzano i
CRS4 - http://www.crs4.it




                                protocolli di comunicazione a basso livello:

                                    IP
                                –


                                    UDP (Datagram Packet e Datagram Socket)
                                –


                                    TCP (Socket e ServerSocket)
                                –




                                               Stefano Sanna - gerda@crs4.it
IP
                                La libreria standard di Java offre classi per:
                            ●


                                    Selezione di una specifica interfaccia di rete
                                –
CRS4 - http://www.crs4.it




                                    sulla macchina host
                                    Recuperare informazioni su un indirizzo
                                –
                                    Internet (IPv4 e IPv6)

                                InetAddress: è la classe che incapsula un
                            ●


                                indirizzo IP. E' utilizzata dalle classi per la
                                gestione dei protocolli UDP e TCP.



                                                 Stefano Sanna - gerda@crs4.it
InetAdress
                                Metodi principali dell'interfaccia pubblica:
                            ●
CRS4 - http://www.crs4.it




                                –   InetAddress.getByName(String host)
                                –   InetAddress.getAllByName(String host)

                                –   String getHostName()
                                –   byte[] getAddress()
                                –   String getHostAddress()




                                              Stefano Sanna - gerda@crs4.it
nslookup...
                            import java.net.*;

                            public class NSLookup {
CRS4 - http://www.crs4.it




                                public static void main(String[] args) {

                                    try {

                                        String addr = InetAddress.getByName(args[0]).getHostAddress();

                                        System.out.println(quot;Host quot; + args[0] + quot; has IP: quot; + addr);

                                    }

                                    catch(Exception e) {

                                        System.out.println(quot;Error: quot; + args[0]);

                                    }

                                }

                            }




                                                           Stefano Sanna - gerda@crs4.it
UDP
                                UDP: User Datagram Protocol
                            ●


                                    Permette di inviare/ricevere pacchetti di byte
                                –
CRS4 - http://www.crs4.it




                                    (datagram) ad/da un host su una porta nota
                                    E' un protocollo connection-less, non orientato
                                –
                                    alla connessione (in senso stretto); non è
                                    garantito l'ordine di arrivo dei pacchetti: è
                                    compito dell'applicazione marcare i dati per
                                    ricostruirne la sequenza
                                    Non offre meccanismi di controllo sul corretto
                                –
                                    invio dei dati: lo strato applicativo deve gestire
                                    tale controllo
                                    Protocolli applicativi basati su UDP: DNS, NFS...
                                –

                                                 Stefano Sanna - gerda@crs4.it
Datagram
                                Java offre alcune classi per la ricezione e
                            ●


                                l'invio di pacchetti UDP:
CRS4 - http://www.crs4.it




                                    Datagram Packet: è un classe “double-face”
                                –
                                    usato come contenitore per l'invio e la
                                    ricezione dei pacchetti

                                    Datagram Socket: è la classe responsabile
                                –
                                    dell'invio dei Datagram Packet ad un server
                                    remoto e l'ascolto su una porta UDP locale



                                                Stefano Sanna - gerda@crs4.it
Datagram Packet
                                Pacchetti in uscita
                            ●


                                    Sono costruiti a partire da un byte[] contenente
                                –
CRS4 - http://www.crs4.it




                                    i dati da inviare:

                                    DatagramPacket(byte[] buf, int length,
                                    InetAddress address, int port)

                                Pacchetti in ingresso
                            ●


                                    Sono costruiti a partire da un byte[] usato
                                –
                                    come buffer per i dati in arrivo:

                                    DatagramPacket(byte[] buf, int length)

                                                Stefano Sanna - gerda@crs4.it
Datagram Packet
                                Metodi principali dell'interfaccia pubblica:
                            ●
CRS4 - http://www.crs4.it




                                –   byte[] getData()
                                –   InetAddress getAddress()
                                –   int getLength()
                                –   int getPort()




                                              Stefano Sanna - gerda@crs4.it
Datagram Socket
                                E' responsabile dell'invio e della ricezione
                            ●


                                dei Datagram Packet. Metodi principali
CRS4 - http://www.crs4.it




                                dell'interfaccia pubblica:
                                –   DatagramSocket(int port)
                                –   int getLocalPort()
                                –   void send(DatagramPacket p)
                                –   void receive(DatagramPacket p)
                                E' possibile assegnare staticamente un
                            ●


                                Datagram Socket ad un host remoto (ferme
                                restando tutte le caratteristiche di UDP)

                                              Stefano Sanna - gerda@crs4.it
TCP/IP
                                Il TCP/IP è un protocollo a livello di
                            ●


                                trasporto:
CRS4 - http://www.crs4.it




                                    Orientato alla connessione: si stabilisce un
                                –
                                    canale virtuale tra client e server che rimane
                                    attivo sino alla chiusura della connessione
                                    Trasparente: l'implementazione si occupa di
                                –
                                    assemblare la corretta sequenza dei pacchetti
                                    in arrivo
                                    Affidabile: in caso di pacchetti persi o corrotti,
                                –
                                    lo stack si occupa di chiedere la ritrasmissione
                                    dei pacchetti mancanti


                                                 Stefano Sanna - gerda@crs4.it
Socket
                                La classe Socket offre i meccanismi base
                            ●


                                per aprire una connessione TCP verso un
CRS4 - http://www.crs4.it




                                server remoto

                                Attraverso il modello basato su stream è
                            ●


                                possibile ricevere e inviare dati in modo
                                trasparente rispetto alla rete fisica
                                utilizzata e ai meccanismi di connessione di
                                quest'ultima



                                             Stefano Sanna - gerda@crs4.it
Socket
                                Metodi principali dell'interfaccia pubblica:
                            ●
CRS4 - http://www.crs4.it




                                –   Socket(String host, int port)
                                –   InputStream getInputStream()
                                –   OutputStream getOutputStream()
                                –   int getPort()
                                –   int getLocalPort()
                                –   InetAddress getInetAddress()
                                –   InetAddress getLocalInetAddress()
                                –   void close()

                                              Stefano Sanna - gerda@crs4.it
ServerSocket
                                La classe ServerSocket è utilizzata creare
                            ●


                                ed assegnare server TCP ad una porta nota
CRS4 - http://www.crs4.it




                                Il modello di comunicazione è simmetrico:
                            ●


                                per ogni connessione, la classe
                                ServerSocket restituisce una istanza di
                                Socket, i cui input e output stream
                                forniscono i canali di comunicazione verso
                                il client remoto



                                            Stefano Sanna - gerda@crs4.it
ServerSocket
                                Metodi principali dell'interfaccia pubblica:
                            ●
CRS4 - http://www.crs4.it




                                –   ServerSocket(int port)
                                –   Socket accept();
                                –   int getLocalPort()
                                –   InetAddress getInetAddress()
                                –   void close()




                                              Stefano Sanna - gerda@crs4.it
CRS4 - http://www.crs4.it




                            Network Games




                              Stefano Sanna - gerda@crs4.it
Network games :-)
                                Il miglior modo per acquisire praticità con
                            ●


                                lo sviluppo di applicazioni network-oriented
CRS4 - http://www.crs4.it




                                e con i protocolli più comuni è...
                                giocarci! :-)

                                Sistemi asincroni, multithreading,
                            ●


                                sicurezza, accesso concorrente ai dati sono
                                problematiche comuni a molte applicazioni
                                di rete...



                                             Stefano Sanna - gerda@crs4.it
Echo
                                Vogliamo scrivere una semplicissima
                            ●


                                applicazione che riceve una stringa
CRS4 - http://www.crs4.it




                                attraverso Socket e la rimanda indietro.
                                Client
                            ●


                                    Apre un socket verso il server
                                –

                                    Invia e riceve una stringa
                                –

                                Server
                            ●


                                    Apre un serversocket e accetta una
                                –
                                    connessione
                                    Restituisce le stringhe ricevute
                                –


                                                Stefano Sanna - gerda@crs4.it
Echo server
                            import java.io.*;

                            import java.net.*;

                            public class EchoServer {
CRS4 - http://www.crs4.it




                                public static void main(String[] args) throws Exception {

                                    ServerSocket serverSocket = new ServerSocket(8899);

                                    Socket socket = serverSocket.accept();

                                    Reader reader = new InputStreamReader(socket.getInputStream());

                                    BufferedReader buffer = new BufferedReader(reader);

                                    PrintStream ps = new PrintStream(socket.getOutputStream());

                                    String read = quot;quot;;

                                    while ((read = buffer.readLine()) != null) {

                                        System.out.println(quot;Ricevuto: quot; + read);

                                        ps.println(read);

                                    }

                            }   }

                                                        Stefano Sanna - gerda@crs4.it
Echo client
                            import java.io.*;

                            import java.net.*;

                            import java.util.Date;
CRS4 - http://www.crs4.it




                            public class EchoClient {

                                 public static void main(String[] args) throws Exception {

                                     Socket clientSocket = new Socket(quot;127.0.0.1quot;, 8899);

                                     Reader reader = new InputStreamReader(clientSocket.getInputStream());

                                     BufferedReader buffer = new BufferedReader(reader);

                                     PrintStream ps = new PrintStream(clientSocket.getOutputStream());

                                     while (true) {

                                         ps.println(new Date(System.currentTimeMillis()));

                                         System.out.println(quot;Tornato indietro: quot; + buffer.readLine());

                                         Thread.sleep(200);

                                     }

                            }}

                                                        Stefano Sanna - gerda@crs4.it
Esplorazione di un protocollo
                                I Socket costituiscono un ottimo strumento
                            ●


                                didattico per imparare a gestire protocolli
CRS4 - http://www.crs4.it




                                di complessità crescente
                                In un modello client/server è possibile:
                            ●


                                    Creare un server fittizio per intercettare e
                                –
                                    tracciare il formato delle chiamate effettuate
                                    da un client
                                    Create un client fittizio che, a fronte di una
                                –
                                    richiesta “elementare” ad un server reale,
                                    intercetti e descriva nel dettaglio il formato dei
                                    dati restituiti dal server

                                                 Stefano Sanna - gerda@crs4.it
Cosa manda un browser?
                                Si supponga di voler esaminare il formato
                            ●


                                di una richiesta HTTP inviata da un browser
CRS4 - http://www.crs4.it




                                al server web

                                Sarà necessario:
                            ●




                                    Creare un serversocket (verosimilmente sulla
                                –
                                    porta 80)

                                    Leggere i dati inviati dal client riga per riga
                                –




                                                 Stefano Sanna - gerda@crs4.it
HTTP Request sniffer...
                            import java.io.*;

                            import java.net.*;

                            public class HTTPRequestSniffer {
CRS4 - http://www.crs4.it




                               public static void main(String[] args) {

                                   try {

                                       ServerSocket serverSocket = new ServerSocket(80);

                                       Socket clientSocket = serverSocket.accept();

                                       InputStream input = clientSocket.getInputStream();

                                       BufferedReader buffer = new BufferedReader(new InputStreamReader(input));

                                       String read = quot;quot;;

                                       int line = 0;

                                        while ((read = buffer.readLine()) != null) {

                                           System.out.println(Integer.toString(line++) + quot; quot; + read);

                                       }

                                   } catch(Exception e) { e.printStackTrace(); }

                              }}


                                                           Stefano Sanna - gerda@crs4.it
HTTP Request: Mozilla
                            GET / HTTP/1.1
                            Host: localhost
                            User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
CRS4 - http://www.crs4.it




                              rv:1.0.1) Gecko/20020823 Netscape/7.0
                            Accept:
                              text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,te
                              xt/plain;q=0.8,video/x-
                              mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
                            Accept-Language: en-us, en;q=0.50
                            Accept-Encoding: gzip, deflate, compress;q=0.9
                            Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
                            Keep-Alive: 300
                            Connection: keep-alive




                                                 Stefano Sanna - gerda@crs4.it
HTTP Request: Internet Explorer
                            GET / HTTP/1.1
                            Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
                              application/vnd.ms-powerpoint, application/vnd.ms-excel,
CRS4 - http://www.crs4.it




                              application/msword, application/x-shockwave-flash, */*
                            Accept-Language: it
                            Accept-Encoding: gzip, deflate
                            User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET
                              CLR 1.1.4322)
                            Host: localhost
                            Connection: Keep-Alive




                                                  Stefano Sanna - gerda@crs4.it
Cosa invia un server web?
                                Conoscendo il formato di una richiesta
                            ●


                                elementare inviata da un browser web,
CRS4 - http://www.crs4.it




                                possiamo preparare un client fittizio con
                                cui tracciare la risposta restituita dal server

                                Sarà necessario:
                            ●


                                    Create un client socket verso un server web
                                –
                                    attivo
                                    Inviare la richiesta minima (GET / HTTP/1.x)
                                –

                                    Leggere i dati inviati dal server riga per riga
                                –



                                                 Stefano Sanna - gerda@crs4.it
HTTP Response sniffer...
                            import java.io.*; import java.net.*;

                            public class HTTPResponseSniffer {

                                public static void main(String[] args) throws Exception {
CRS4 - http://www.crs4.it




                                    Socket clientSocket = new Socket(quot;java.sun.comquot;, 80);

                                    InputStream input = clientSocket.getInputStream();

                                    BufferedReader buffer = new BufferedReader(new InputStreamReader(input));

                                    PrintStream ps = new PrintStream(clientSocket.getOutputStream());

                                    ps.println(quot;GET / HTTP/1.0nnquot;);

                                    String read = quot;quot;;

                                    int line = 0;

                                    while ((read = buffer.readLine()) != null) {

                                        System.out.println(Integer.toString(line++) + quot; quot; + read);

                                    }

                                }

                            }



                                                        Stefano Sanna - gerda@crs4.it
HTTP Response di java.sun.com
                            HTTP/1.1 200 OK

                            Server: Netscape-Enterprise/6.0

                            Date: Tue, 18 May 2004 12:53:33 GMT
CRS4 - http://www.crs4.it




                            Content-type: text/html;charset=ISO-8859-1

                            Set-cookie: JSESSIONID=java.sun.com-987f%253A40aa074a%
                               253A391e72d077d4b9a;path=/;expires=Tue, 18-May-2004 13:23:31 GMT

                            Connection: close



                            <!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot;>

                            <html>

                            <head>

                            <title>Java Technology</title>

                            <meta name=quot;keywordsquot; content=quot;Java, platformquot; />



                            [...]

                                                    Stefano Sanna - gerda@crs4.it
Multithreading
                                Rispetto ad altri linguaggi (Pascal,
                            ●


                                C/C++...), Java nasce con la
CRS4 - http://www.crs4.it




                                multiprogrammazione “in mente”
                                La possibilità di gestire più flussi di
                            ●


                                esecuzione concorrenti in maniera nativa
                                nel linguaggio è fondamentale per facilitare
                                lo sviluppo di applicazioni network-oriented
                                Il server deve gestire in modo concorrente
                            ●


                                più connessioni, delegando a ciascun
                                thread la gestione di un client


                                             Stefano Sanna - gerda@crs4.it
Multithreading
                                L'esempio di “Echo server”
                            ●


                                precedentemente illustrato... funziona una
CRS4 - http://www.crs4.it




                                sola volta e con un solo client!
                                E' necessario incapsulare la gestione di una
                            ●


                                singola connessione all'interno di un
                                Thread separato
                                                                      Connection 1


                                                                      Connection 1
                                      Echo Server

                                                                      Connection 1

                                              Stefano Sanna - gerda@crs4.it
Multithreading
                                Un Thread gestisce la connessione:
                            ●
CRS4 - http://www.crs4.it




                            private static class Connection extends Thread {

                                    private Socket clientSocket;

                                    public Connection(Socket socket) {

                                        this.clientSocket = socket;

                                        start();

                                    }

                                    public void run() {

                                        try {

                                            // CODICE DI LETTURA:..
                                        }

                                        catch(Exception e) { e.printStackTrace(); }

                                    }

                                }


                                                          Stefano Sanna - gerda@crs4.it
Multithreading
                                Il server istanzia un Thread per ogni
                            ●


                                connessione ricevuta:
CRS4 - http://www.crs4.it




                            public static void main(String[] args) throws Exception {

                                ServerSocket serverSocket = new ServerSocket(8899);
                                while (true) {
                                    Socket clientSocket = serverSocket.accept();
                                    new Connection(clientSocket);

                                }

                            }




                                                    Stefano Sanna - gerda@crs4.it
Protocolli applicativi
                                L'API Java offre classi per la gestione di
                            ●


                                protocolli a livello applicativo (ad esempio
CRS4 - http://www.crs4.it




                                HTTP), che permettono di sviluppare in
                                modo semplice e rapido potenti
                                applicazioni network oriented

                                Il network programming permette di
                            ●


                                trascurare tutti i dettagli del protocollo
                                sottostante per concentrarsi solamente
                                sullo scambio dei contenuti


                                             Stefano Sanna - gerda@crs4.it
URL e URLConnection
                                La classe URL rappresenta un Uniform
                            ●


                                Resource Locator, cioè un riferimento
CRS4 - http://www.crs4.it




                                formale ad una risorsa reperibile su
                                Internet
                                La classe URLConnection rappresenta la
                            ●


                                connessione al servizio su cui risiede la
                                risorsa individuata da un URL
                                Attenzione:
                            ●


                                    URL: non più “indirizzo IP”!
                                –

                                    URLConnection: non più Socket!
                                –



                                                Stefano Sanna - gerda@crs4.it
HttpURLConnection
                                E' la classe che incapsula la gestione di una
                            ●


                                connessione HTTP ad un server web
CRS4 - http://www.crs4.it




                                Nasconde tutti i dettagli del protocollo,
                            ●


                                gestendo l'invio degli header, la codifica
                                dei dati binari e la notifica degli errori di
                                elaborazione

                                Si ottiene a partire da una URL valida
                            ●




                                              Stefano Sanna - gerda@crs4.it
HttpURLConnection
                                Metodi principali dell'interfaccia pubblica:
                            ●
CRS4 - http://www.crs4.it




                                –   URL.openConnection()
                                –   Object getContent()
                                –   int getContentLength()
                                –   String getHeaderField(String name)
                                –   String getRequestProperty(String name)
                                –   InputStream getInputStream()
                                –   OutputStream getOutputStream()



                                              Stefano Sanna - gerda@crs4.it
Domande?
CRS4 - http://www.crs4.it




                             Stefano Sanna - gerda@crs4.it
Bibliografia
                                Java Network Programming
                            ●


                                E. Rusty Harold
CRS4 - http://www.crs4.it




                                O'Reilly 2000
                                ISBN: 1565928709



                                XML-RPC
                                F. Caboni e S. Sanna
                                Gruppo Utenti Linux Cagliari
                                LinuxDay 2003
                                http://linuxday.gulch.crs4.it
                                             Stefano Sanna - gerda@crs4.it
Conclusioni
                                Java offre una potente libreria per la
                            ●


                                gestione delle connessioni in rete
CRS4 - http://www.crs4.it




                                Qualsiasi sia la versione utilizzata
                            ●


                                (Enterprise, Standard, Micro), vi è sempre
                                la possibilità di connettersi ad un server
                                remoto per inviare e ricevere dati
                                java.net.* è una buona palestra per
                            ●


                                prendere dimestichezza con i più diffusi
                                protocolli di comunicazione!



                                             Stefano Sanna - gerda@crs4.it
Grazie... :-)
CRS4 - http://www.crs4.it




                                      Copyright (c) 2004-2005 CRS4

                                 Scritto da Stefano Sanna (gerda@crs4.it)

                            è garantito il permesso di copiare, distribuire e/o
                            modificare questo documento seguendo i termini
                            della Licenza per Documentazione Libera GNU,
                            Versione 1.1 o ogni versione successiva pubblicata
                            dalla Free Software Foundation. Una copia della
                            licenza in lingua italiana è disponibile presso:

                             http://www.softwarelibero.it/gnudoc/fdl.it.html




                                                             Stefano Sanna - gerda@crs4.it

More Related Content

Viewers also liked

Viewers also liked (6)

Snowflakes in Orlando
Snowflakes in OrlandoSnowflakes in Orlando
Snowflakes in Orlando
 
Go Rmedik Ama Ozledik
Go Rmedik Ama OzledikGo Rmedik Ama Ozledik
Go Rmedik Ama Ozledik
 
Balloon Art
Balloon ArtBalloon Art
Balloon Art
 
Fotosnocturnas
FotosnocturnasFotosnocturnas
Fotosnocturnas
 
01.2008 AcampãO
01.2008   AcampãO01.2008   AcampãO
01.2008 AcampãO
 
Volcanowhy
VolcanowhyVolcanowhy
Volcanowhy
 

Similar to Java Network Programming

Composizione dinamica di funzioni di rete virtuali in ambiente cloud
Composizione dinamica di funzioni di rete virtuali in ambiente cloudComposizione dinamica di funzioni di rete virtuali in ambiente cloud
Composizione dinamica di funzioni di rete virtuali in ambiente cloudFrancesco Foresta
 
2 - Introduzione a Internet (1/2) - 17/18
2 - Introduzione a Internet (1/2) - 17/182 - Introduzione a Internet (1/2) - 17/18
2 - Introduzione a Internet (1/2) - 17/18Giuseppe Vizzari
 
Reliable And Timely Multipoint Distribution Infrastructure
Reliable And Timely Multipoint Distribution InfrastructureReliable And Timely Multipoint Distribution Infrastructure
Reliable And Timely Multipoint Distribution InfrastructurePaolo Maresca
 
Reti di computer e protocolli
Reti di computer e protocolliReti di computer e protocolli
Reti di computer e protocollifilibertodicarlo
 
SISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMA
SISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMASISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMA
SISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMAFilippo LICENZIATI
 
Vpn Virtual Private Network
Vpn Virtual Private NetworkVpn Virtual Private Network
Vpn Virtual Private Networkcarmine ricca
 
Analysis and Characterization of Devices and Protocol Stacks for the Internet...
Analysis and Characterization of Devices and Protocol Stacks for the Internet...Analysis and Characterization of Devices and Protocol Stacks for the Internet...
Analysis and Characterization of Devices and Protocol Stacks for the Internet...Mauro Losciale
 
Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Giuseppe Vizzari
 
Cloudup, cloud server al minuto
Cloudup, cloud server al minutoCloudup, cloud server al minuto
Cloudup, cloud server al minutoENTER S.r.l.
 
Dai protocolli alla_startup_bsw2010
Dai protocolli alla_startup_bsw2010Dai protocolli alla_startup_bsw2010
Dai protocolli alla_startup_bsw2010Leandro Agro'
 
Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...
Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...
Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...Adriano Scaruffi
 
Network_Forensics_Analysis_Tool.pptx
Network_Forensics_Analysis_Tool.pptxNetwork_Forensics_Analysis_Tool.pptx
Network_Forensics_Analysis_Tool.pptxManlioSantonastaso
 
Lezione 1 - Teoria - Accenni sulle reti e sui servizi internet
Lezione 1 - Teoria - Accenni sulle reti e sui servizi internetLezione 1 - Teoria - Accenni sulle reti e sui servizi internet
Lezione 1 - Teoria - Accenni sulle reti e sui servizi internetGiuseppe Cramarossa
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
Short Brocade Presentation
Short Brocade PresentationShort Brocade Presentation
Short Brocade PresentationLeonardo Antichi
 
Sistemi e reti : Il livello di trasporto
Sistemi e reti : Il livello di trasportoSistemi e reti : Il livello di trasporto
Sistemi e reti : Il livello di trasportoStefano Scarpellini
 
[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...
[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...
[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...Marcello Marino
 

Similar to Java Network Programming (20)

Composizione dinamica di funzioni di rete virtuali in ambiente cloud
Composizione dinamica di funzioni di rete virtuali in ambiente cloudComposizione dinamica di funzioni di rete virtuali in ambiente cloud
Composizione dinamica di funzioni di rete virtuali in ambiente cloud
 
Network essentials
Network essentialsNetwork essentials
Network essentials
 
2 - Introduzione a Internet (1/2) - 17/18
2 - Introduzione a Internet (1/2) - 17/182 - Introduzione a Internet (1/2) - 17/18
2 - Introduzione a Internet (1/2) - 17/18
 
Reliable And Timely Multipoint Distribution Infrastructure
Reliable And Timely Multipoint Distribution InfrastructureReliable And Timely Multipoint Distribution Infrastructure
Reliable And Timely Multipoint Distribution Infrastructure
 
Reti di computer e protocolli
Reti di computer e protocolliReti di computer e protocolli
Reti di computer e protocolli
 
SISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMA
SISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMASISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMA
SISTEMI INFORMATIVI TERRITORIALI: ARCHITETTURA DI SISTEMA
 
Vpn Virtual Private Network
Vpn Virtual Private NetworkVpn Virtual Private Network
Vpn Virtual Private Network
 
Analysis and Characterization of Devices and Protocol Stacks for the Internet...
Analysis and Characterization of Devices and Protocol Stacks for the Internet...Analysis and Characterization of Devices and Protocol Stacks for the Internet...
Analysis and Characterization of Devices and Protocol Stacks for the Internet...
 
Reti
RetiReti
Reti
 
Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19
 
Cloudup, cloud server al minuto
Cloudup, cloud server al minutoCloudup, cloud server al minuto
Cloudup, cloud server al minuto
 
Dai protocolli alla_startup_bsw2010
Dai protocolli alla_startup_bsw2010Dai protocolli alla_startup_bsw2010
Dai protocolli alla_startup_bsw2010
 
Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...
Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...
Architetture per la riservatezza, integrità e disponibilità dei dati nei sist...
 
Network_Forensics_Analysis_Tool.pptx
Network_Forensics_Analysis_Tool.pptxNetwork_Forensics_Analysis_Tool.pptx
Network_Forensics_Analysis_Tool.pptx
 
Lezione 1 - Teoria - Accenni sulle reti e sui servizi internet
Lezione 1 - Teoria - Accenni sulle reti e sui servizi internetLezione 1 - Teoria - Accenni sulle reti e sui servizi internet
Lezione 1 - Teoria - Accenni sulle reti e sui servizi internet
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Short Brocade Presentation
Short Brocade PresentationShort Brocade Presentation
Short Brocade Presentation
 
Sistemi e reti : Il livello di trasporto
Sistemi e reti : Il livello di trasportoSistemi e reti : Il livello di trasporto
Sistemi e reti : Il livello di trasporto
 
[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...
[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...
[Ldna 2019 marcello marino] mt's driver ravenna aes67 audio contribution over...
 
Presentazione Telco Labs
Presentazione Telco LabsPresentazione Telco Labs
Presentazione Telco Labs
 

More from Stefano Sanna

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Stefano Sanna
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017 Stefano Sanna
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in actionStefano Sanna
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconStefano Sanna
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented SmartphoneStefano Sanna
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low EnergyStefano Sanna
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidStefano Sanna
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVStefano Sanna
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniStefano Sanna
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsStefano Sanna
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniStefano Sanna
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappoleStefano Sanna
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth HackingStefano Sanna
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open HardwareStefano Sanna
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0Stefano Sanna
 

More from Stefano Sanna (20)

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in action
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeacon
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented Smartphone
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low Energy
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera Android
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TV
 
Introduzione ad NFC
Introduzione ad NFCIntroduzione ad NFC
Introduzione ad NFC
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioni
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioni
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappole
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth Hacking
 
Android
AndroidAndroid
Android
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open Hardware
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 

Java Network Programming

  • 1. java.net.* CRS4 - http://www.crs4.it Basic Network Tutorial aprile 2005 Stefano Sanna - gerda@crs4.it
  • 2. Agenda Java e network programming ● Low-level programming, network ● CRS4 - http://www.crs4.it programming e distributed computing UDP e TCP ● Client e Server ● Applicazioni ● Bibliografia ● Conclusioni ● Stefano Sanna - gerda@crs4.it
  • 3. Java CRS4 - http://www.crs4.it Stefano Sanna - gerda@crs4.it
  • 4. Protocol stack CRS4 - http://www.crs4.it Applicazione Applicazione (HTTP, FTP...) (HTTP, FTP...) Trasporto Trasporto (UDP, TCP, RTP) (UDP, TCP, RTP) Rete Rete (IP) (IP) Hardware Hardware Stefano Sanna - gerda@crs4.it
  • 5. Protocolli di rete E' importante conoscere i diversi protocolli ● a disposizione: caratteristiche e finalità, i CRS4 - http://www.crs4.it limiti, le potenzialità, l'affidabilità, la robustezza, l'overhead introdotto, la sicurezza, i requisiti di memoria e calcolo La scelta del protocollo giusto deve essere ● fatta in base a: banda disponibile – affidabilità della rete (wired/wireless) – volume dei dati scambiati – ... – Stefano Sanna - gerda@crs4.it
  • 6. Tre livelli di sviluppo L'evoluzione dei protocolli e delle ● infrastrutture di rete ha portato CRS4 - http://www.crs4.it “idealmente” a tre livelli distinti di programmazione e sviluppo network- oriented: Low-level Network Programming – Network Programming – Distributed Computing – Stefano Sanna - gerda@crs4.it
  • 7. Low-level network programming Per low-level network programming ● intendiamo la possibilità di scambiare dati CRS4 - http://www.crs4.it primitivi e complessi attraverso stream su trasporto TCP e UDP. Attraverso le classi Socket e ServerSocket ● è possibile gestire la comunicazione client/server per l'invio di byte[], tipi base, oggetti serializzati La logica di comunicazione è responsabilità ● del programmatore che dovrà prevedere opportuni codici di controllo Stefano Sanna - gerda@crs4.it
  • 8. Network Programming Per network programming intendiamo ● l'utilizzo di uno o più protocolli applicativi, CRS4 - http://www.crs4.it che si occupano di gestire la logica di comunicazione tra client e server A seconda del protocollo scelto, il ● programmatore dispone di strumenti più o meno complessi che nascondono i dettagli implementativi della specifica Esempi di protocolli applicativi: Telnet, FTP, ● HTTP, SSH, NFS, NTP... Stefano Sanna - gerda@crs4.it
  • 9. Distributed Computing Il distributed computing rappresenta la ● possibilità di delocalizzare l'elaborazione CRS4 - http://www.crs4.it sui nodi di una rete in modo trasparente per il programmatore ed il codice applicativo Attraverso opportuni meccanisimi di ● binding, lookup e serializzazione di oggetti, l'invocazione di metodi e l'accesso a funzioni remote avviene come se risorse fossero locali: la presenza della rete è totalmente mascherata dalle librerie applicative Stefano Sanna - gerda@crs4.it
  • 10. Distributed Computing Esempi di distributed computing sono: ● Java RMI: permette l'invocazione remota di – CRS4 - http://www.crs4.it metodi in maniera trasparente per il programmatore. Oggetti locali e remoti sono trattati allo stesso modo CORBA: permette l'interoperabilità tra – componenti software scritti in linguaggi diversi Web Service: usano l'invocazione remota di – metodi attraverso scambio di documenti XML su protocollo HTTP XML-RPC ● SOAP ● Stefano Sanna - gerda@crs4.it
  • 11. Stream model Il sistema di I/O di Java è basato sul ● modello a stream: opportuni oggetti CRS4 - http://www.crs4.it permettono di gestire i flussi di byte in ingresso e in uscita Il modello a stream permette una gestione ● omogenea delle sorgenti di dati, a prescindere dal supporto fisico (file, rete, porta seriale, link Bluetooth...) Attraverso un insieme componibile di filtri ● (decorator) e adattatori è possibile elaborare i byte in transito Stefano Sanna - gerda@crs4.it
  • 12. Input/Output Stream InputStream: ● Gestisce i flussi di byte in ingresso – CRS4 - http://www.crs4.it Fornisce facility di buffering elementari – OutputStream: ● Gestisce i flussi di byte in uscita (con buffering) – DataSource Applicazione Filter 2 Filter n Input/Output Stream Filter 1 Stefano Sanna - gerda@crs4.it
  • 13. Data Stream I tipi base quali numeri interi, numeri in ● virgola mobile, valori logici e stringhe CRS4 - http://www.crs4.it (ASCII, Unicode, UTF) sono codificati con più byte (non sempre indipendenti dalla piattaforma) Al fine di rendere la trasmissione di tali dati ● trasparente rispetto alla effettiva codifica (si pensi alla variabilità del numero di bit di un valore numerico intero) si utilizzano i DataStream, che offrono i metodi per leggere/scrivere int, short, long, float, double, String... Stefano Sanna - gerda@crs4.it
  • 14. Gestione caratteri: reader L'introduzione di specifiche quali Unicode ● (1.0 e 2.0) e UTF-8 ha portato alla CRS4 - http://www.crs4.it necessità di trattare in maniera dedicata il trasferimento di stream di caratteri: non è garantita, infatti, la corrispondenza “classica” 1byte == 1char! :-( Reader e Writer sono gli strumenti utilizzati ● da Java per accedere a flussi di caratteri indipendentemente dalla codifica utilizzata Stefano Sanna - gerda@crs4.it
  • 15. Buffering Alcuni protocolli si basano su scambio ● sequenze di stringhe separate da CR+LF: il CRS4 - http://www.crs4.it protocollo HTTP, ad esempio, descrivere le intestazioni (header) delle HTTP Request e Response La gestione dei flussi “per righe” può ● essere fatta agevolmente attraverso l'uso di classi quali il BufferedReader, che offre metodi per la lettura “line by line” Stefano Sanna - gerda@crs4.it
  • 16. Low-level network programming Introduciamo ora i concetti base per lo ● sviluppo di applicazioni che utilizzano i CRS4 - http://www.crs4.it protocolli di comunicazione a basso livello: IP – UDP (Datagram Packet e Datagram Socket) – TCP (Socket e ServerSocket) – Stefano Sanna - gerda@crs4.it
  • 17. IP La libreria standard di Java offre classi per: ● Selezione di una specifica interfaccia di rete – CRS4 - http://www.crs4.it sulla macchina host Recuperare informazioni su un indirizzo – Internet (IPv4 e IPv6) InetAddress: è la classe che incapsula un ● indirizzo IP. E' utilizzata dalle classi per la gestione dei protocolli UDP e TCP. Stefano Sanna - gerda@crs4.it
  • 18. InetAdress Metodi principali dell'interfaccia pubblica: ● CRS4 - http://www.crs4.it – InetAddress.getByName(String host) – InetAddress.getAllByName(String host) – String getHostName() – byte[] getAddress() – String getHostAddress() Stefano Sanna - gerda@crs4.it
  • 19. nslookup... import java.net.*; public class NSLookup { CRS4 - http://www.crs4.it public static void main(String[] args) { try { String addr = InetAddress.getByName(args[0]).getHostAddress(); System.out.println(quot;Host quot; + args[0] + quot; has IP: quot; + addr); } catch(Exception e) { System.out.println(quot;Error: quot; + args[0]); } } } Stefano Sanna - gerda@crs4.it
  • 20. UDP UDP: User Datagram Protocol ● Permette di inviare/ricevere pacchetti di byte – CRS4 - http://www.crs4.it (datagram) ad/da un host su una porta nota E' un protocollo connection-less, non orientato – alla connessione (in senso stretto); non è garantito l'ordine di arrivo dei pacchetti: è compito dell'applicazione marcare i dati per ricostruirne la sequenza Non offre meccanismi di controllo sul corretto – invio dei dati: lo strato applicativo deve gestire tale controllo Protocolli applicativi basati su UDP: DNS, NFS... – Stefano Sanna - gerda@crs4.it
  • 21. Datagram Java offre alcune classi per la ricezione e ● l'invio di pacchetti UDP: CRS4 - http://www.crs4.it Datagram Packet: è un classe “double-face” – usato come contenitore per l'invio e la ricezione dei pacchetti Datagram Socket: è la classe responsabile – dell'invio dei Datagram Packet ad un server remoto e l'ascolto su una porta UDP locale Stefano Sanna - gerda@crs4.it
  • 22. Datagram Packet Pacchetti in uscita ● Sono costruiti a partire da un byte[] contenente – CRS4 - http://www.crs4.it i dati da inviare: DatagramPacket(byte[] buf, int length, InetAddress address, int port) Pacchetti in ingresso ● Sono costruiti a partire da un byte[] usato – come buffer per i dati in arrivo: DatagramPacket(byte[] buf, int length) Stefano Sanna - gerda@crs4.it
  • 23. Datagram Packet Metodi principali dell'interfaccia pubblica: ● CRS4 - http://www.crs4.it – byte[] getData() – InetAddress getAddress() – int getLength() – int getPort() Stefano Sanna - gerda@crs4.it
  • 24. Datagram Socket E' responsabile dell'invio e della ricezione ● dei Datagram Packet. Metodi principali CRS4 - http://www.crs4.it dell'interfaccia pubblica: – DatagramSocket(int port) – int getLocalPort() – void send(DatagramPacket p) – void receive(DatagramPacket p) E' possibile assegnare staticamente un ● Datagram Socket ad un host remoto (ferme restando tutte le caratteristiche di UDP) Stefano Sanna - gerda@crs4.it
  • 25. TCP/IP Il TCP/IP è un protocollo a livello di ● trasporto: CRS4 - http://www.crs4.it Orientato alla connessione: si stabilisce un – canale virtuale tra client e server che rimane attivo sino alla chiusura della connessione Trasparente: l'implementazione si occupa di – assemblare la corretta sequenza dei pacchetti in arrivo Affidabile: in caso di pacchetti persi o corrotti, – lo stack si occupa di chiedere la ritrasmissione dei pacchetti mancanti Stefano Sanna - gerda@crs4.it
  • 26. Socket La classe Socket offre i meccanismi base ● per aprire una connessione TCP verso un CRS4 - http://www.crs4.it server remoto Attraverso il modello basato su stream è ● possibile ricevere e inviare dati in modo trasparente rispetto alla rete fisica utilizzata e ai meccanismi di connessione di quest'ultima Stefano Sanna - gerda@crs4.it
  • 27. Socket Metodi principali dell'interfaccia pubblica: ● CRS4 - http://www.crs4.it – Socket(String host, int port) – InputStream getInputStream() – OutputStream getOutputStream() – int getPort() – int getLocalPort() – InetAddress getInetAddress() – InetAddress getLocalInetAddress() – void close() Stefano Sanna - gerda@crs4.it
  • 28. ServerSocket La classe ServerSocket è utilizzata creare ● ed assegnare server TCP ad una porta nota CRS4 - http://www.crs4.it Il modello di comunicazione è simmetrico: ● per ogni connessione, la classe ServerSocket restituisce una istanza di Socket, i cui input e output stream forniscono i canali di comunicazione verso il client remoto Stefano Sanna - gerda@crs4.it
  • 29. ServerSocket Metodi principali dell'interfaccia pubblica: ● CRS4 - http://www.crs4.it – ServerSocket(int port) – Socket accept(); – int getLocalPort() – InetAddress getInetAddress() – void close() Stefano Sanna - gerda@crs4.it
  • 30. CRS4 - http://www.crs4.it Network Games Stefano Sanna - gerda@crs4.it
  • 31. Network games :-) Il miglior modo per acquisire praticità con ● lo sviluppo di applicazioni network-oriented CRS4 - http://www.crs4.it e con i protocolli più comuni è... giocarci! :-) Sistemi asincroni, multithreading, ● sicurezza, accesso concorrente ai dati sono problematiche comuni a molte applicazioni di rete... Stefano Sanna - gerda@crs4.it
  • 32. Echo Vogliamo scrivere una semplicissima ● applicazione che riceve una stringa CRS4 - http://www.crs4.it attraverso Socket e la rimanda indietro. Client ● Apre un socket verso il server – Invia e riceve una stringa – Server ● Apre un serversocket e accetta una – connessione Restituisce le stringhe ricevute – Stefano Sanna - gerda@crs4.it
  • 33. Echo server import java.io.*; import java.net.*; public class EchoServer { CRS4 - http://www.crs4.it public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8899); Socket socket = serverSocket.accept(); Reader reader = new InputStreamReader(socket.getInputStream()); BufferedReader buffer = new BufferedReader(reader); PrintStream ps = new PrintStream(socket.getOutputStream()); String read = quot;quot;; while ((read = buffer.readLine()) != null) { System.out.println(quot;Ricevuto: quot; + read); ps.println(read); } } } Stefano Sanna - gerda@crs4.it
  • 34. Echo client import java.io.*; import java.net.*; import java.util.Date; CRS4 - http://www.crs4.it public class EchoClient { public static void main(String[] args) throws Exception { Socket clientSocket = new Socket(quot;127.0.0.1quot;, 8899); Reader reader = new InputStreamReader(clientSocket.getInputStream()); BufferedReader buffer = new BufferedReader(reader); PrintStream ps = new PrintStream(clientSocket.getOutputStream()); while (true) { ps.println(new Date(System.currentTimeMillis())); System.out.println(quot;Tornato indietro: quot; + buffer.readLine()); Thread.sleep(200); } }} Stefano Sanna - gerda@crs4.it
  • 35. Esplorazione di un protocollo I Socket costituiscono un ottimo strumento ● didattico per imparare a gestire protocolli CRS4 - http://www.crs4.it di complessità crescente In un modello client/server è possibile: ● Creare un server fittizio per intercettare e – tracciare il formato delle chiamate effettuate da un client Create un client fittizio che, a fronte di una – richiesta “elementare” ad un server reale, intercetti e descriva nel dettaglio il formato dei dati restituiti dal server Stefano Sanna - gerda@crs4.it
  • 36. Cosa manda un browser? Si supponga di voler esaminare il formato ● di una richiesta HTTP inviata da un browser CRS4 - http://www.crs4.it al server web Sarà necessario: ● Creare un serversocket (verosimilmente sulla – porta 80) Leggere i dati inviati dal client riga per riga – Stefano Sanna - gerda@crs4.it
  • 37. HTTP Request sniffer... import java.io.*; import java.net.*; public class HTTPRequestSniffer { CRS4 - http://www.crs4.it public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(80); Socket clientSocket = serverSocket.accept(); InputStream input = clientSocket.getInputStream(); BufferedReader buffer = new BufferedReader(new InputStreamReader(input)); String read = quot;quot;; int line = 0; while ((read = buffer.readLine()) != null) { System.out.println(Integer.toString(line++) + quot; quot; + read); } } catch(Exception e) { e.printStackTrace(); } }} Stefano Sanna - gerda@crs4.it
  • 38. HTTP Request: Mozilla GET / HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; CRS4 - http://www.crs4.it rv:1.0.1) Gecko/20020823 Netscape/7.0 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,te xt/plain;q=0.8,video/x- mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 Accept-Language: en-us, en;q=0.50 Accept-Encoding: gzip, deflate, compress;q=0.9 Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66 Keep-Alive: 300 Connection: keep-alive Stefano Sanna - gerda@crs4.it
  • 39. HTTP Request: Internet Explorer GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, CRS4 - http://www.crs4.it application/msword, application/x-shockwave-flash, */* Accept-Language: it Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) Host: localhost Connection: Keep-Alive Stefano Sanna - gerda@crs4.it
  • 40. Cosa invia un server web? Conoscendo il formato di una richiesta ● elementare inviata da un browser web, CRS4 - http://www.crs4.it possiamo preparare un client fittizio con cui tracciare la risposta restituita dal server Sarà necessario: ● Create un client socket verso un server web – attivo Inviare la richiesta minima (GET / HTTP/1.x) – Leggere i dati inviati dal server riga per riga – Stefano Sanna - gerda@crs4.it
  • 41. HTTP Response sniffer... import java.io.*; import java.net.*; public class HTTPResponseSniffer { public static void main(String[] args) throws Exception { CRS4 - http://www.crs4.it Socket clientSocket = new Socket(quot;java.sun.comquot;, 80); InputStream input = clientSocket.getInputStream(); BufferedReader buffer = new BufferedReader(new InputStreamReader(input)); PrintStream ps = new PrintStream(clientSocket.getOutputStream()); ps.println(quot;GET / HTTP/1.0nnquot;); String read = quot;quot;; int line = 0; while ((read = buffer.readLine()) != null) { System.out.println(Integer.toString(line++) + quot; quot; + read); } } } Stefano Sanna - gerda@crs4.it
  • 42. HTTP Response di java.sun.com HTTP/1.1 200 OK Server: Netscape-Enterprise/6.0 Date: Tue, 18 May 2004 12:53:33 GMT CRS4 - http://www.crs4.it Content-type: text/html;charset=ISO-8859-1 Set-cookie: JSESSIONID=java.sun.com-987f%253A40aa074a% 253A391e72d077d4b9a;path=/;expires=Tue, 18-May-2004 13:23:31 GMT Connection: close <!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot;> <html> <head> <title>Java Technology</title> <meta name=quot;keywordsquot; content=quot;Java, platformquot; /> [...] Stefano Sanna - gerda@crs4.it
  • 43. Multithreading Rispetto ad altri linguaggi (Pascal, ● C/C++...), Java nasce con la CRS4 - http://www.crs4.it multiprogrammazione “in mente” La possibilità di gestire più flussi di ● esecuzione concorrenti in maniera nativa nel linguaggio è fondamentale per facilitare lo sviluppo di applicazioni network-oriented Il server deve gestire in modo concorrente ● più connessioni, delegando a ciascun thread la gestione di un client Stefano Sanna - gerda@crs4.it
  • 44. Multithreading L'esempio di “Echo server” ● precedentemente illustrato... funziona una CRS4 - http://www.crs4.it sola volta e con un solo client! E' necessario incapsulare la gestione di una ● singola connessione all'interno di un Thread separato Connection 1 Connection 1 Echo Server Connection 1 Stefano Sanna - gerda@crs4.it
  • 45. Multithreading Un Thread gestisce la connessione: ● CRS4 - http://www.crs4.it private static class Connection extends Thread { private Socket clientSocket; public Connection(Socket socket) { this.clientSocket = socket; start(); } public void run() { try { // CODICE DI LETTURA:.. } catch(Exception e) { e.printStackTrace(); } } } Stefano Sanna - gerda@crs4.it
  • 46. Multithreading Il server istanzia un Thread per ogni ● connessione ricevuta: CRS4 - http://www.crs4.it public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8899); while (true) { Socket clientSocket = serverSocket.accept(); new Connection(clientSocket); } } Stefano Sanna - gerda@crs4.it
  • 47. Protocolli applicativi L'API Java offre classi per la gestione di ● protocolli a livello applicativo (ad esempio CRS4 - http://www.crs4.it HTTP), che permettono di sviluppare in modo semplice e rapido potenti applicazioni network oriented Il network programming permette di ● trascurare tutti i dettagli del protocollo sottostante per concentrarsi solamente sullo scambio dei contenuti Stefano Sanna - gerda@crs4.it
  • 48. URL e URLConnection La classe URL rappresenta un Uniform ● Resource Locator, cioè un riferimento CRS4 - http://www.crs4.it formale ad una risorsa reperibile su Internet La classe URLConnection rappresenta la ● connessione al servizio su cui risiede la risorsa individuata da un URL Attenzione: ● URL: non più “indirizzo IP”! – URLConnection: non più Socket! – Stefano Sanna - gerda@crs4.it
  • 49. HttpURLConnection E' la classe che incapsula la gestione di una ● connessione HTTP ad un server web CRS4 - http://www.crs4.it Nasconde tutti i dettagli del protocollo, ● gestendo l'invio degli header, la codifica dei dati binari e la notifica degli errori di elaborazione Si ottiene a partire da una URL valida ● Stefano Sanna - gerda@crs4.it
  • 50. HttpURLConnection Metodi principali dell'interfaccia pubblica: ● CRS4 - http://www.crs4.it – URL.openConnection() – Object getContent() – int getContentLength() – String getHeaderField(String name) – String getRequestProperty(String name) – InputStream getInputStream() – OutputStream getOutputStream() Stefano Sanna - gerda@crs4.it
  • 51. Domande? CRS4 - http://www.crs4.it Stefano Sanna - gerda@crs4.it
  • 52. Bibliografia Java Network Programming ● E. Rusty Harold CRS4 - http://www.crs4.it O'Reilly 2000 ISBN: 1565928709 XML-RPC F. Caboni e S. Sanna Gruppo Utenti Linux Cagliari LinuxDay 2003 http://linuxday.gulch.crs4.it Stefano Sanna - gerda@crs4.it
  • 53. Conclusioni Java offre una potente libreria per la ● gestione delle connessioni in rete CRS4 - http://www.crs4.it Qualsiasi sia la versione utilizzata ● (Enterprise, Standard, Micro), vi è sempre la possibilità di connettersi ad un server remoto per inviare e ricevere dati java.net.* è una buona palestra per ● prendere dimestichezza con i più diffusi protocolli di comunicazione! Stefano Sanna - gerda@crs4.it
  • 54. Grazie... :-) CRS4 - http://www.crs4.it Copyright (c) 2004-2005 CRS4 Scritto da Stefano Sanna (gerda@crs4.it) è garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini della Licenza per Documentazione Libera GNU, Versione 1.1 o ogni versione successiva pubblicata dalla Free Software Foundation. Una copia della licenza in lingua italiana è disponibile presso: http://www.softwarelibero.it/gnudoc/fdl.it.html Stefano Sanna - gerda@crs4.it