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