SlideShare a Scribd company logo
1 of 19
Lezione 4: Comunicazione
            con UDP
         Corso di Programmazione in Rete
        Laurea Magistrale in Ing. Informatica
          Università degli Studi di Salerno



1
Outline


    ✦ Introduzione

    ✦ Comunicazione con DatagramSocket

    ✦ Comunicazione con MulticastSocket




2
Introduzione
    ✦ Protocollo UDP
     •   non richiede l’instaurazione di una connessione
         tra le due parti che comunicano
     •   minore latenza, perché non c’è un acknowledge
         dei pacchetti
         ‣   utile ad esempio per applicazioni di streaming

     •   possibilità di inviare un pacchetto a più destinatari
         simultaneamente
     •   non viene garantita la consegna dei pacchetti
     •   non viene garantito l’ordine dei pacchetti


3
Datagram
    ✦ Lo scambio di informazioni avviene in
      unità dette datagram
    ✦ Il contenuto di un datagram è un array di
      byte (max. 65507 byte)
    ✦ Il protocollo garantisce l’integrità dei
      datagram
     •   un datagram o non arriva o arriva per intero
     •   i datagram non vengono mai spezzati o
         raggruppati (a livello 4)


4
La classe InetAddress
    ✦ Per specificare gli indirizzi da usare per le
      comunicazioni UDP occorre usare la
      classe InetAddress
    ✦ Un InetAddress rappresenta un indirizzo
      IP
    ✦ Gli oggetti InetAddress si costruiscono
      con il metodo:
     •   static InetAddress getByName(String name);
         ‣   name è il nome simbolico o la rappresentazione
             dell’indirizzo numerico


5
La classe DatagramSocket

    ✦ DatagramSocket rappresenta un socket
      per inviare o ricevere datagram UDP
    ✦ Costruttori:
     •   DatagramSocket()
         ‣   il socket è associato a una porta scelta dal sistema

     •   DatagramSocket(int port)




6
Uso di un DatagramSocket


    ✦ Una volta creato, un DatagramSocket può
      essere usato per inviare/ricevere
      messaggi
    ✦ A tale scopo occorre usare oggetti della
      classe DatagramPacket




7
La classe DatagramPacket
    ✦ Costruttori:
      •   DatagramPacket(byte buf[], int maxLen);
          ‣   packet usato come buffer per ricevere datagram

      •   DatagramPacket(byte buf[], int len, InetAddress
          addr, int port);
       ‣ packet per inviare un datagram
    ✦ Metodi:
      •   int getLength();
      •   byte[] getData();
      •   InetAddress getAddress();
      •   int getPort();
8
Invio di un datagram
         ✦ Si usa il metodo:
            •   void send(DatagramPacket packet);
         ✦ Esempio:
    	   public static void main(String args[]) throws IOException {
    	   	 DatagramSocket sock=new DatagramSocket();
    	   	 byte [] mess={'H', 'e', 'l', 'l', 'o'};
    	   	 InetAddress addr=InetAddress.getByName(args[0]);
    	   	 DatagramPacket packet=new DatagramPacket(mess, mess.length, addr, PORT);
    	   	 sock.send(packet);
    	   }




9
Ricezione di un datagram
          ✦ Si usa il metodo:
             •   void receive(DatagramPacket packet);
          ✦ Esempio:
     	   public static void main(String args[]) throws IOException {
     	   	 DatagramSocket sock=new DatagramSocket(PORT);
     	   	 byte [] mess=new byte[MAX];
     	   	 DatagramPacket packet=new DatagramPacket(mess, mess.length);
     	   	 sock.receive(packet);
     	   	 System.out.println("Ricevuti: "+packet.getLength()+" bytes");
     	   }




10
Uso di DatagramPacket
     ✦ Per trasmettere informazioni diverse da
       byte:
      •   Si può usare un ByteArrayOutputStream per
          scrivere una serie di informazioni in un array di
          byte
      •   La lettura può essere fatta con un
          ByteArrayInputStream
          ‣   Per specificare la lunghezza del buffer può essere utile il
              costruttore:
              -   ByteArrayInputStream(byte[] arr, int offset, int length);




11
Multicast

     ✦ Con UDP è possibile inviare datagram a
       indirizzati a un gruppo di destinatari
       utilizzando una modalità detta multicast
     ✦ Un datagram multicast viene trasmesso
       una sola volta su ciascuna rete locale
       indipendentemente dal numero di
       destinatari che lo riceveranno
      •   risparmio di tempo e di banda



12
Indirizzi multicast

     ✦ Ciascun gruppo di destinatari viene
       individuato attraverso un indirizzo
       multicast:
      •   in IPv4, indirizzi compresi tra 224.0.0.1 e
          239.255.255.255
     ✦ Alcuni indirizzi multicast sono riservati ad
       applicazioni di larga diffusione
      •   gli indirizzi 239.*.*.* sono riservati per uso locale



13
Time to live
     ✦ Un datagram multicast viene distribuito
       dai router verso tutte le reti collegate
       (broadcast)
     ✦ Per evitare l’inondazione della rete il
       datagram ha un numero massimo di salti
       (hops) da una rete all’altra
      •   questo parametro, detto Time To Live (TTL), può
          avere un valore tra 0 e 255
     ✦ I router possono applicare ulteriori
       restrizioni rispetto al TTL impostato nel
       datagram
14
La classe MulticastSocket

     ✦ Sottoclasse di DatagramSocket per
       inviare/ricevere in multicast
     ✦ Costruttori e metodi simili a
       DatagramSocket:
      •   MulticastSocket();
      •   MulticastSocket(int port);




15
La classe MulticastSocket

     ✦ Per poter ricevere un messaggio
       multicast, il socket deve essere “iscritto”
       al gruppo con il metodo:
      •   void joinGroup(InetAddress group);
         ‣ group rappresenta un indirizzo IP multicast
     ✦ Il socket può rimuoversi dal gruppo con il
       metodo:
      •   void leaveGroup(InetAddress group);



16
La classe MulticastSocket

     ✦ È possibile specificare il TTL dei datagram
       inviati con il metodo:
      •   void setTimeToLive(int ttl);
     ✦ Per default il TTL è 1 (solo rete locale)
      •   Nota: impostando il TTL a 0 i datagram vengono
          inviati solo all’indirizzo di loopback (cioè
          raggiungono solo eventuali altre applicazioni sullo
          stesso computer)



17
Invio in multicast
      ✦ Esempio:

 	   public static void main(String args[]) throws IOException {
 	   	 MulticastSocket sock=new MulticastSocket();
 	   	 byte [] mess={'H', 'e', 'l', 'l', 'o'};
 	   	 InetAddress addr=InetAddress.getByName(args[0]);
 	   	 DatagramPacket packet=new DatagramPacket(mess, mess.length, addr, PORT);
 	   	 sock.send(packet);
 	   }




18
Ricezione in multicast
      ✦ Esempio:
 	   public static void main(String args[]) throws IOException {
 	   	 MulticastSocket sock=new MulticastSocket(PORT);
 	   	 InetAddress addr=InetAddress.getByName(args[0]);
 	   	 sock.joinGroup(addr);
 	   	 byte [] mess=new byte[MAX];
 	   	 DatagramPacket packet=new DatagramPacket(mess, mess.length);
 	   	 sock.receive(packet);
 	   	 System.out.println("Ricevuti: "+packet.getLength()+" bytes");
 	   }




19

More Related Content

What's hot

Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!MarioTraetta
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTAndrea Della Corte
 
Introduzione all'Information Gathering
Introduzione all'Information GatheringIntroduzione all'Information Gathering
Introduzione all'Information GatheringSalvatore Lentini
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Majong DevJfu
 

What's hot (6)

Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Introduzione all'Information Gathering
Introduzione all'Information GatheringIntroduzione all'Information Gathering
Introduzione all'Information Gathering
 
pugBO #10 PSR e Composer
pugBO #10 PSR e ComposerpugBO #10 PSR e Composer
pugBO #10 PSR e Composer
 
Ap Camp 2011
Ap Camp 2011Ap Camp 2011
Ap Camp 2011
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
 

Similar to Lezione 4: Comunicazione con UDP

Introduzione al livello di rete e Dijkstra algorithm
Introduzione al livello di rete e Dijkstra algorithmIntroduzione al livello di rete e Dijkstra algorithm
Introduzione al livello di rete e Dijkstra algorithmorestJump
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLAndrea Della Corte
 
9 Intranetting
9 Intranetting9 Intranetting
9 Intranettingacapone
 
IoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureIoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureStefano Valle
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network ComandiMauro Ferrigno
 
Clink
ClinkClink
Clinkh4f
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasportoacapone
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Andrea Tosato
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
Introduzione ai protocolli tcp/ip ed al Domain Name System
Introduzione ai protocolli tcp/ip ed al Domain Name SystemIntroduzione ai protocolli tcp/ip ed al Domain Name System
Introduzione ai protocolli tcp/ip ed al Domain Name SystemRoBisc
 
4 Protocollo Ip
4 Protocollo Ip4 Protocollo Ip
4 Protocollo Ipacapone
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...azuredayit
 
Network configuration - IPTables firewall
 Network configuration - IPTables firewall Network configuration - IPTables firewall
Network configuration - IPTables firewallFulvio Corno
 
Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0Gabriele Di Bernardo
 

Similar to Lezione 4: Comunicazione con UDP (20)

Introduzione al livello di rete e Dijkstra algorithm
Introduzione al livello di rete e Dijkstra algorithmIntroduzione al livello di rete e Dijkstra algorithm
Introduzione al livello di rete e Dijkstra algorithm
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
9 Intranetting
9 Intranetting9 Intranetting
9 Intranetting
 
IoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureIoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architetture
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network Comandi
 
Clink
ClinkClink
Clink
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasporto
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018
 
Multicast IPv6
Multicast IPv6Multicast IPv6
Multicast IPv6
 
Gnutella
GnutellaGnutella
Gnutella
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Introduzione ai protocolli tcp/ip ed al Domain Name System
Introduzione ai protocolli tcp/ip ed al Domain Name SystemIntroduzione ai protocolli tcp/ip ed al Domain Name System
Introduzione ai protocolli tcp/ip ed al Domain Name System
 
Reti Domestiche
Reti DomesticheReti Domestiche
Reti Domestiche
 
4 Protocollo Ip
4 Protocollo Ip4 Protocollo Ip
4 Protocollo Ip
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
Packet Sniffing
Packet SniffingPacket Sniffing
Packet Sniffing
 
Network configuration - IPTables firewall
 Network configuration - IPTables firewall Network configuration - IPTables firewall
Network configuration - IPTables firewall
 
Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0
 
TCP IP
TCP IPTCP IP
TCP IP
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 

More from Andrea Della Corte

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingAndrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaAndrea Della Corte
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Andrea Della Corte
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in JavaAndrea Della Corte
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceAndrea Della Corte
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationAndrea Della Corte
 

More from Andrea Della Corte (19)

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Recently uploaded

Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
CON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla CresimaCON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla CresimaRafael Figueredo
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.giuliofiorerm
 
San Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxSan Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxMartin M Flynn
 

Recently uploaded (9)

Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
CON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla CresimaCON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla Cresima
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
 
San Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxSan Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptx
 

Lezione 4: Comunicazione con UDP

  • 1. Lezione 4: Comunicazione con UDP Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Introduzione ✦ Comunicazione con DatagramSocket ✦ Comunicazione con MulticastSocket 2
  • 3. Introduzione ✦ Protocollo UDP • non richiede l’instaurazione di una connessione tra le due parti che comunicano • minore latenza, perché non c’è un acknowledge dei pacchetti ‣ utile ad esempio per applicazioni di streaming • possibilità di inviare un pacchetto a più destinatari simultaneamente • non viene garantita la consegna dei pacchetti • non viene garantito l’ordine dei pacchetti 3
  • 4. Datagram ✦ Lo scambio di informazioni avviene in unità dette datagram ✦ Il contenuto di un datagram è un array di byte (max. 65507 byte) ✦ Il protocollo garantisce l’integrità dei datagram • un datagram o non arriva o arriva per intero • i datagram non vengono mai spezzati o raggruppati (a livello 4) 4
  • 5. La classe InetAddress ✦ Per specificare gli indirizzi da usare per le comunicazioni UDP occorre usare la classe InetAddress ✦ Un InetAddress rappresenta un indirizzo IP ✦ Gli oggetti InetAddress si costruiscono con il metodo: • static InetAddress getByName(String name); ‣ name è il nome simbolico o la rappresentazione dell’indirizzo numerico 5
  • 6. La classe DatagramSocket ✦ DatagramSocket rappresenta un socket per inviare o ricevere datagram UDP ✦ Costruttori: • DatagramSocket() ‣ il socket è associato a una porta scelta dal sistema • DatagramSocket(int port) 6
  • 7. Uso di un DatagramSocket ✦ Una volta creato, un DatagramSocket può essere usato per inviare/ricevere messaggi ✦ A tale scopo occorre usare oggetti della classe DatagramPacket 7
  • 8. La classe DatagramPacket ✦ Costruttori: • DatagramPacket(byte buf[], int maxLen); ‣ packet usato come buffer per ricevere datagram • DatagramPacket(byte buf[], int len, InetAddress addr, int port); ‣ packet per inviare un datagram ✦ Metodi: • int getLength(); • byte[] getData(); • InetAddress getAddress(); • int getPort(); 8
  • 9. Invio di un datagram ✦ Si usa il metodo: • void send(DatagramPacket packet); ✦ Esempio: public static void main(String args[]) throws IOException { DatagramSocket sock=new DatagramSocket(); byte [] mess={'H', 'e', 'l', 'l', 'o'}; InetAddress addr=InetAddress.getByName(args[0]); DatagramPacket packet=new DatagramPacket(mess, mess.length, addr, PORT); sock.send(packet); } 9
  • 10. Ricezione di un datagram ✦ Si usa il metodo: • void receive(DatagramPacket packet); ✦ Esempio: public static void main(String args[]) throws IOException { DatagramSocket sock=new DatagramSocket(PORT); byte [] mess=new byte[MAX]; DatagramPacket packet=new DatagramPacket(mess, mess.length); sock.receive(packet); System.out.println("Ricevuti: "+packet.getLength()+" bytes"); } 10
  • 11. Uso di DatagramPacket ✦ Per trasmettere informazioni diverse da byte: • Si può usare un ByteArrayOutputStream per scrivere una serie di informazioni in un array di byte • La lettura può essere fatta con un ByteArrayInputStream ‣ Per specificare la lunghezza del buffer può essere utile il costruttore: - ByteArrayInputStream(byte[] arr, int offset, int length); 11
  • 12. Multicast ✦ Con UDP è possibile inviare datagram a indirizzati a un gruppo di destinatari utilizzando una modalità detta multicast ✦ Un datagram multicast viene trasmesso una sola volta su ciascuna rete locale indipendentemente dal numero di destinatari che lo riceveranno • risparmio di tempo e di banda 12
  • 13. Indirizzi multicast ✦ Ciascun gruppo di destinatari viene individuato attraverso un indirizzo multicast: • in IPv4, indirizzi compresi tra 224.0.0.1 e 239.255.255.255 ✦ Alcuni indirizzi multicast sono riservati ad applicazioni di larga diffusione • gli indirizzi 239.*.*.* sono riservati per uso locale 13
  • 14. Time to live ✦ Un datagram multicast viene distribuito dai router verso tutte le reti collegate (broadcast) ✦ Per evitare l’inondazione della rete il datagram ha un numero massimo di salti (hops) da una rete all’altra • questo parametro, detto Time To Live (TTL), può avere un valore tra 0 e 255 ✦ I router possono applicare ulteriori restrizioni rispetto al TTL impostato nel datagram 14
  • 15. La classe MulticastSocket ✦ Sottoclasse di DatagramSocket per inviare/ricevere in multicast ✦ Costruttori e metodi simili a DatagramSocket: • MulticastSocket(); • MulticastSocket(int port); 15
  • 16. La classe MulticastSocket ✦ Per poter ricevere un messaggio multicast, il socket deve essere “iscritto” al gruppo con il metodo: • void joinGroup(InetAddress group); ‣ group rappresenta un indirizzo IP multicast ✦ Il socket può rimuoversi dal gruppo con il metodo: • void leaveGroup(InetAddress group); 16
  • 17. La classe MulticastSocket ✦ È possibile specificare il TTL dei datagram inviati con il metodo: • void setTimeToLive(int ttl); ✦ Per default il TTL è 1 (solo rete locale) • Nota: impostando il TTL a 0 i datagram vengono inviati solo all’indirizzo di loopback (cioè raggiungono solo eventuali altre applicazioni sullo stesso computer) 17
  • 18. Invio in multicast ✦ Esempio: public static void main(String args[]) throws IOException { MulticastSocket sock=new MulticastSocket(); byte [] mess={'H', 'e', 'l', 'l', 'o'}; InetAddress addr=InetAddress.getByName(args[0]); DatagramPacket packet=new DatagramPacket(mess, mess.length, addr, PORT); sock.send(packet); } 18
  • 19. Ricezione in multicast ✦ Esempio: public static void main(String args[]) throws IOException { MulticastSocket sock=new MulticastSocket(PORT); InetAddress addr=InetAddress.getByName(args[0]); sock.joinGroup(addr); byte [] mess=new byte[MAX]; DatagramPacket packet=new DatagramPacket(mess, mess.length); sock.receive(packet); System.out.println("Ricevuti: "+packet.getLength()+" bytes"); } 19