I Il Server e il Client si scambiano messaggi attraverso la rete mediante un dell API (Application Programming Interface) Telematica II 10. Esercitazione/Laboratorio 3 Server ports Clients user space Socket API kernel space Corso di Laurea in Ingegneria Informatica A.A. 2009-2010 2 Semestre hardware Prof. Giovanni Pascoschi 2 Creazione di un UtilizzodeinumeridiportaTCP Le applicazioni (client & ) devono specificare: associazione Numero di porta locale Indirizzo host locale Numero di porta remoto Indirizzo host remoto Protocollo di Trasporto Opzioni aggiuntive Semiassociazione Semiassociazione i numeri di porta sono usati per identificare entita diverse su un host i numeri di porta possono essere well-known (porte 0-1023) dinamiche o private (porte 1024-65535) i servizi/daemons usano di solito le porte well-known ogni client puo identificare il o i servizi HTTP = 80, FTP = 21, Telnet = 23,... il file presente nel percorso windows/system32/drivers/etc/services contiene le porte well-known i client di solito usano porte dinamiche che sono assegnate dal kernel a run-time NTP daemon port 7777 Web service port 80 3 4
Programmazione dei con TCP #1 Programmazione dei con TCP #2 TCP trasferimento affidabile di byte da un processo ad un altro residente tipicamente su un altro host applicativo di S.O. processo TCP con buffers, variabili host o internet processo TCP con buffers, variabili host o applicativo di S.O. 1. il client deve contattare il il processo deve essere gia nello stato running 2. il deve aver creato il che accettera i contatti dal client 3. il client contatta il mediante: la creazione di un TCP locale specificando l indirizzo, il numero di porta del processo 4. dopo aver creato il, il client instaura una al TCP 5. in generale, quando e contattato da un client, il TCP crea un nuovo per comunicare con il client permette la con client multipli il numero di porta servira per distinguere i vari client N.B.: nei primi esempi useremo una client/ 1:1 5 6 Interazione con client/ TCP Esercitazione su TCP lato #1 Server (hostid) creazione di un, port=7777, per richieste entranti: servsocket=socket( ) in attesa di una richiesta di : = servsocket.accept( ); richiesta di lettura from invia risposta al chiude il TCP setup della Client creazione di un, all hostid, port=7777 = Socket( ) invia una richiesta usando legge risposta dal chiude il Per utilizzare le classi JAVA utili alla gestione dei : import java.net.*; Server TCP con un unico thread (serve un solo client per volta) 1. Creare un ServerSocket indicando il numero di porta 2. Mettersi in attesa di da parte del client; a stabilita si ottiene un oggetto di classe Socket () 3. Ottenere gli stream di input e output associati al Socket 4. Comunicare con il client usando gli stream di I/O per leggere (=ricevere) e scrivere (=inviare) dati 5. Chiudere il Socket (eventualmente tornare al passo 2 per servire un altro client) 6. Chiudere il ServerSocket 7 8
Esercitazione su TCP lato #2 Esercitazione 3 TCP Echo Server richiesta di Viene illustrato un esercizio TCP Echo Server sulla gestione dei TCP sul (esercitazione 7FS) client internet Socket stabilita 9 10 Esercitazione su TCP lato client Esercitazione 4 TCP Echo Client Client TCP 1. Connettersi creando un Socket () e specificando indirizzo del e porta TCP del servizio 2. Ottenere gli stream di input e output associati al Socket (come per il ) 3. Comunicare con il usando gli stream di I/O per scrivere (=inviare) e leggere (=ricevere) dati 4. Chiudere il Socket Viene illustrato un esercizio TCP Echo Client sulla gestione dei TCP sul client (esercitazione 8FS) 11 12
Esercitazione su TCP altra versione Esercitazione 5 TCP Server generico Server TCP generico / EchoServer2 La classe astratta TCPServer implementa un generico TCP, svolgendo le funzionalità comuni di gestione delle connessioni Un metodo astratto (chiamato processrequest nell'esempio) isola la logica di livello applicativo Ridefinendo questo metodo in una classe derivata si implementa uno specifico protocollo applicativo su TCP Una soluzione analoga è adottata per la creazione di Java servlet, applicazioni Java (lato ) eseguite per generare pagine Web dinamiche Occorrono sia un web per gestire la comunicazione HTTP (ad esempio Apache Httpd ) sia un Java servlet container per eseguire le servlet (ad esempio Apache Tomcat) Viene illustrato un esercizio TCP Server generico sulla gestione dei TCP sul (esercitazione BONUSFS) 13 14 Riepilogo della lezione Fine della lezione Esercitazione/Laboratorio 3 Gestione TCP su & client Esercitazioni sulla gestione TCP lato & client Analisi esercizi assegnati n. 4, 5, 6 e 7 Domande? 15 16
Esercizio n.9 Realizzare un applicazione client/ (1:1) che implementa il seguente servizio: 1. Invio da parte del client di una frase testuale, di un campo chiave Cesare di tipo intero e di un flag booleano tipo (0 per codifica chiaro CodCesare; 1 per codifica CodCesare chiaro) 2. Codifica/decodifica da parte del della frase con crittografia di Cesare utilizzando il campo Cesare (negativo/positivo) e il flag per codifica diretta / inversa, al fine di ottenere la frase risultante 3. Invio al client dellla frase crittografata/decrittografata 17