Server UDP in JAVA
DayTime
daemon
Telematica II
obiettivo Æ realizzazione di un
servizio
per
l’invio
della
data/orario del server al client
Port 13
12. Esercitazione/Laboratorio 4
utilizzo di un datagram socket
UDP
IP
Corso di Laurea in Ingegneria Informatica
A.A. 2009-2010
2° Semestre
Prof. Giovanni Pascoschi
Ethernet Adapter
2
Programmazione socket UDP in JAVA
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Interazione con socket client/server UDP
UDP Æ User Datagram Protocol
Server (hostid)
‰ Permette di inviare/ricevere pacchetti di byte (datagram)
ad / da un host su una porta nota
Client
creazione di un socket,
port=13:
dgramSocket=DatagramSocket( )
‰ 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
creazione di un socket,
dgramSocket = DatagramSocket( )
richiesta di lettura datagram
da dgramSocket
‰ Non offre meccanismi di controllo sul corretto invio dei dati:
lo strato applicativo deve gestire tale controllo
invia risposta tramite dgramSocket
indicando client IP e la porta
creazione di un datagram con il
server IP e la porta, invia datagram
usando dgramSocket
legge datagram dal dgramSocket
‰ Protocolli applicativi basati su UDP: DNS, NFS...
chiude il
dgramSocket
3
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
4
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Programmazione socket UDP in JAVA
Programmazione socket UDP in JAVA
Java le seguenti classi per la ricezione e l'invio di pacchetti
UDP:
‰ Pacchetti in uscita Æ Sono costruiti a partire da un array di
byte byte[ ] contenente i dati da inviare:
‰ Datagram Packet: è una classe “double-face” usata come
contenitore per l'invio e la ricezione dei pacchetti
DatagramPacket(byte[ ] buf, int length, InetAddress address, int
port) (costruttore a 4 parametri)
‰ Datagram Socket: è la classe responsabile dell'invio dei
Datagram Packet ad un server remoto e l'ascolto su una porta
UDP locale
‰ Pacchetti in ingresso Æ Sono costruiti a partire da un array di
byte byte[ ] usato come buffer per i dati in arrivo:
DatagramPacket(byte[ ] buf, int length) (costruttore a 2
parametri)
5
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
6
Programmazione socket UDP in JAVA
7
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Programmazione socket UDP in JAVA
Metodi principali dell'interfaccia pubblica:
‰ Datagram Socket
E' responsabile dell'invio e della ricezione dei Datagram Packet.
¾ byte[ ] getData() Æ acquisisce i dati in un array di byte
¾ InetAddress getAddress() Æ individua l’indirizzo IP di classe
Inet Address
¾ int getLength() Æ individua la lunghezza del messaggio
¾ int getPort() Æ individua la porta
Metodi principali dell'interfaccia pubblica:
¾ DatagramSocket(int port)
¾ int getLocalPort() Æ individua la porta locale
¾ void send(DatagramPacket p) Æ invia il datagram
¾ void receive(DatagramPacket p) Æ riceve il datagram
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
8
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione su socket UDP – lato server
Esercitazione 6 – Server UDP in JAVA
Per utilizzare le classi JAVA utili alla gestione dei socket:
import java.net.*;
Server UDP
Viene illustrato un esercizio UDPDaytimeServer sulla gestione
del protocollo UDP lato server in JAVA (esercitazione 9FS)
1. Creare un DatagramSocket impostando il numero di porta
2. Creare un buffer per i pacchetti in arrivo
3. Creare un DatagramPacket per i pacchetti in arrivo
4. Accettare un pacchetto in arrivo
5. Ottenere indirizzo IP e porta del mittente
6. Recuperare i dati dal buffer
7. Creare il pacchetto di risposta
8. Inviare il pacchetto di risposta
9. Chiudere il socket
9
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
10
Esercitazione su socket UDP – lato client
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione 6 – Client UDP in JAVA
Per utilizzare le classi JAVA utili alla gestione dei socket:
import java.net.*;
Client UDP
Viene illustrato un esercizio UDPDaytimeClient sulla gestione
del protocollo UDP lato client in JAVA (esercitazione 10FS)
1. Creare un DatagramSocket usando il costruttore senza parametri
2. Creare un DatagramPacket per il pacchetto in uscita
3. Inviare il pacchetto
4. Creare un buffer per i pacchetti in arrivo
5. Creare un DatagramPacket per i pacchetti in arrivo
6. Ricevere un pacchetto in arrivo
7. Recuperare i dati del pacchetto ricevuto
8. Chiudere il socket
11
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
12
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Ulteriori precisazioni sulla gestione UDP in JAVA
‰ entrambi client e server usano il DatagramSocket
‰ l’IP di destinazione e la porta sono esplicitamente associati al
datagram
‰ puo’ un client inviare un datagram a un server senza conoscere l’IP
del server e/o il numero di porta?
‰ possono piu’ client interfacciare il server?
13
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Analisi esercizi assegnati nelle precedenti lezioni
‰ analisi risoluzione esercizi n.4, 5 e 6 delle precedenti lezioni
14
Riepilogo della lezione
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Fine della lezione
Esercitazione/Laboratorio 4
Gestione protocollo UDP client/server in JAVA
Analisi esercizi assegnati n. 4, 5, 6
15
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Domande?
16
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercizio n.10 (su protocollo UDP)
17
Esercizio n.11 (sniffer con protocollo TCP)
Realizzare un’ applicazione client/server con protocollo UDP che implementa il
seguente servizio:
a) Realizzare un’ applicazione che analizza i pacchetti HTTP Request di un
browser (Internet Explorer e Mozilla)
1) il client invia al server una frase testuale
2) il server reinvia al client la frase testuale con le lettere maiuscole
b) Realizzare un’applicazione che analizza i pacchetti HTTP Response di un
web-browser
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
18
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni