Server UDP in JAVA Telematica II 12. Esercitazione/Laboratorio 4 DayTime daemon UDP Port 13 obiettivo realizzazione di un servizio per l invio della data/orario del server al client utilizzo di un datagram socket IP Corso di Laurea in Ingegneria Informatica Ethernet Adapter A.A. 2009-2010 2 Semestre Prof. Giovanni Pascoschi 2 Interazione con socket client/server UDP UDP User Datagram Protocol Permette di inviare/ricevere pacchetti di byte (datagram) ad / da un host su una porta nota Server (hostid) creazione di un socket, port=13: dgramsocket=datagramsocket( ) Client 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... richiesta di lettura datagram da dgramsocket invia risposta tramite dgramsocket indicando client IP e la porta creazione di un socket, dgramsocket = DatagramSocket( ) creazione di un datagram con il server IP e la porta, invia datagram usando dgramsocket legge datagram dal dgramsocket 3 4 chiude il dgramsocket
Java le seguenti classi per la ricezione e l'invio di pacchetti UDP: Datagram Packet: è una classe double-face usata come contenitore per l'invio e la ricezione dei pacchetti Pacchetti in uscita Sono costruiti a partire da un array di byte byte[ ] contenente i dati da inviare: 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 6 Metodi principali dell'interfaccia pubblica: 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 Datagram Socket E' responsabile dell'invio e della ricezione dei Datagram Packet. 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 7 8
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 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 Viene illustrato un esercizio UDPDaytimeServer sulla gestione del protocollo UDP lato server in JAVA (esercitazione 9FS) 9 10 Esercitazione su socket UDP lato client Esercitazione 6 Client UDP in JAVA Per utilizzare le classi JAVA utili alla gestione dei socket: import java.net.*; Client UDP 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 Viene illustrato un esercizio UDPDaytimeClient sulla gestione del protocollo UDP lato client in JAVA (esercitazione 10FS) 11 12
Ulteriori precisazioni sulla gestione UDP in JAVA Analisi esercizi assegnati nelle precedenti lezioni 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? analisi risoluzione esercizi n.4, 5 e 6 delle precedenti lezioni 13 14 Riepilogo della lezione Fine della lezione Esercitazione/Laboratorio 4 Gestione protocollo UDP client/server in JAVA Analisi esercizi assegnati n. 4, 5, 6 Domande? 15 16
Esercizio n.10 (su protocollo UDP) Esercizio n.11 (sniffer con protocollo TCP) Realizzare un applicazione client/server con protocollo UDP che implementa il seguente servizio: 1) il client invia al server una frase testuale 2) il server reinvia al client la frase testuale con le lettere maiuscole a) Realizzare un applicazione che analizza i pacchetti HTTP Request di un browser (Internet Explorer e Mozilla) b) Realizzare un applicazione che analizza i pacchetti HTTP Response di un web-browser 17 18