✦ Introduzione
✦ Connessioni TCP lato client: la classe
Socket
✦ Connessioni TCP lato server: la classe
ServerSocket
✦ Struttura di un server multi-threaded
Intro a Linux tenuta all'università degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
✦ Introduzione
✦ Connessioni TCP lato client: la classe
Socket
✦ Connessioni TCP lato server: la classe
ServerSocket
✦ Struttura di un server multi-threaded
Intro a Linux tenuta all'università degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
In ASP.NET Core 3.0 è stato introdotto il supporto a gRPC, una framework altamente performante per fare Remote Procedure Call (RPC). Leggero e molto efficiente, supportato da molti linguaggi, supporto ad una comunicazione bidirezionale, riduzione del consumo di banda...solo questi solo alcuni dei vantaggi che descrivono gRPC, e che durante la sessione cercheremo di capire se siano reali o meno.
Fatto sta che è una tecnologia assolutamente da conoscere e sfruttare nello sviluppo di app moderno, e non solamente in ambito web.
Codice: https://github.com/andreadottor/XE.Dottor.gRPC
Evento: https://www.xedotnet.org/eventi/grpc-and-c-optimising-night/
In ASP.NET Core 3.0 è stato introdotto il supporto a gRPC, una framework altamente performante per fare Remote Procedure Call (RPC). Leggero e molto efficiente, supportato da molti linguaggi, supporto ad una comunicazione bidirezionale, riduzione del consumo di banda...solo questi solo alcuni dei vantaggi che descrivono gRPC, e che durante la sessione cercheremo di capire se siano reali o meno.
Fatto sta che è una tecnologia assolutamente da conoscere e sfruttare nello sviluppo di app moderno, e non solamente in ambito web.
Codice: https://github.com/andreadottor/XE.Dottor.gRPC
Evento: https://www.xedotnet.org/eventi/grpc-and-c-optimising-night/
Master: Amministratore Linux - Livello Base
Nel contesto della formazione professionale rivolta ad aziende ed enti pubblici, sono stati preparati ed erogati dei corsi di Amministratore di sistemi Linux, al livello base ed al livello avanzato.
Il contenuto del corso è allineato con alcuni moduli della certificazione LPIC (Linux Professional Institute Certification), a cavallo tra i livelli 1 e 2. Tutto il materiale didattico è disponibile liberamente con licenza Creative Commons BY-NC-SA.
I docenti del corso sono i proff. Giovanni Squillero, Bartolomeo Montrucchio e Fulvio Corno.
Maggiori informazioni: http://elite.polito.it/index.php/teaching/current-courses/255-master-linux-admin
Il lavoro descrive la progettazione, l'implementazione e il test sperimentale di un meccanismo, integrato nel kernel Linux 4.0, dedicato al riconoscimento delle perdite dei frame Wi-Fi
✦ Progettazione in XP
✦ Principi di progettazione: Semplicità
✦ Test Driven Development
✦ Self Documenting Code
✦ Once and Only Once
✦ You Ain’t Gonna Need It
✦ Automazione dei test in Java: JUnit
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