Your SlideShare is downloading. ×
Lezione 4: Comunicazione con UDP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lezione 4: Comunicazione con UDP

1,536

Published on

✦ Introduzione …

✦ Introduzione
✦ Comunicazione con DatagramSocket
✦ Comunicazione con MulticastSocket

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,536
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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

×