Protocollo FTP
FTP Client
Telematica II
FTP Server
TCP control connection
(port 21)
21)
TCP data connection (port
(port 20)
20)
File System
remoto
File System
locale
15. Esercitazione/Laboratorio 5
‰ La connessione di controllo è persistente ed identifica una
sessione (necessaria autenticazione mediante login / logout)
‰ La
connessione
dati
non
è
persistente,
nell’ambito di una sessione, per ogni ambito file trasferito è
creata una nuova connessione dati (il server è in ascolto sulla
porta 20 in attesa di nuove connessioni)
Corso di Laurea in Ingegneria Informatica
A.A. 2009-2010
2° Semestre
Prof. Giovanni Pascoschi
2
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione 7 – MiniFTPServer
Esercitazione su protocollo FTP – lato server #2
richiesta di
connessione di controllo
su porta 21
client
server
Socket
internet
socket
socket
Realizzare un mini server FTP che gestisce solo il login
anonimo ed i comandi PORT, RETR e QUIT (esercitazione
11FS)
server
FTP
connessione
dati stabilita
su porta 20 del server
3
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
4
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione 7 – MiniFTPServer (UML)
Esercitazione su protocollo FTP – lato server #1
‰ Per utilizzare le classi JAVA utili alla gestione dei socket:
import java.net.*;
MiniFTPServer
‰ Server miniFTP (gestisce solo i comandi USER, PASS, PORT,
RETR, QUIT)
1. Creare un ServerSocket (servSocket) indicando il numero di porta
2. Mettersi in attesa di connessione da parte del client; a
connessione stabilita si ottiene un oggetto di classe Socket (link)
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Æ processa richiesta
(processRequest)
5. Nel caso di comando RETR, inviare il file su una nuova
connessione Socket (dataSock) sul server
6. Chiudere il Socket dataSock sul server
5
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
6
Telematica II – A.A. 2009-2010
costruttore
metodo main
metodo di avvio del server
metodo di fermata del server
metodo nucleo centrale del server
metodo di elaborazione della richiesta
metodo di invio al client
a cura di Pascoschi Giovanni
.....
int address[ ] = new int[6];
// array di 6 interi
int start = 5;
// indice iniziale della sottostringa
int i;
for (i=0; i<5; i++) {
int end = request.indexOf(",", start); //estrazione dell’indice di ‘,’
address[i] = Integer.parseInt(request.substring(start, end));
//estrazione sottostringa dalla posizione start alla posizione end-1
start = end + 1;
// incremento di start alla sottostringa successiva (dopo la ‘,’)
}
dove i primi 4 numeri costituiscono l’indirizzo IP e i successivi
due la porta da utilizzare con la formula n5*256+n6.
Implementare un programma in Java che permette di ricavare
clientAddress di classe InetAddress da n1, n2, n3 e n4 e
clientDataPort da n5 e n6.
a cura di Pascoschi Giovanni
username fornito dal client
indirizzo IP client
porta client
Esercitazione 7 – MiniFTPServer (parsing) #1
Problema (parsing di un testo): Abbiamo una riga di testo nel
formato
“PORT n1,n2,n3,n4,n5,n6”
Telematica II – A.A. 2009-2010
flag di stato
+ MiniFtpServer(String ftpRoot)
+ void main(String[ ] args)
+ void start( )
+ void stop( )
+ void serve( )
+ void processRequest(String request, Printwriter response)
+ void send(StringBuffer b)
Esercitazione 7 – MiniFTPServer (parsing)
7
oggetto servSocket
percorso root FTP
+ ServerSocket servSocket
- String ftpRoot
- boolean running
- boolean session
- boolean userflag
- boolean login
- boolean portflag
- String username
- InetAddress clientAddr
- int clientDataPort
8
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione 7 – MiniFTPServer (parsing) #2
Esercitazione 7 – MiniFTPServer
address[5] = Integer.parseInt(request.substring(start));
// estrazione ultima sottostringa partire dalla posizione start
for (i=0; i<6; i++) {
if (address[i]<0 || address[i]>255) {
//check validità numeri
throw new Exception("Argomento non valido");
}
}
clientAddr = InetAddress.getByName(address[0] + "." + address[1] +
"." + address[2] + "." + address[3]);
//ind. IP client
clientDataPort = 256*address[4] + address[5];
//porta client
9
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Viene illustrato un esercizio MiniFTPServer sulla gestione del
protocolllo FTP sul server (esercitazione 11FS)
10
Esercitazione 7 – MiniFTPServer Q&A
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione su protocollo FTP – lato server (riepilogo)
nell’esercitazione e’ rispettata la RFC 959 FTP?
‰ struttura tipica di un server TCP
accesso autenticato? implementati tutti i comandi?
‰ la logica del protocollo applicativo (FTP) è incapsulata in un metodo
(processRequest) Æ è piu’ comodo gestire il protocollo applicativo
sono usate le porte 21 e 20 del server come specifica?
¾
¾
ad ogni passo distingue quale comando è stato ricevuto e lo esegue
variabili di stato della sessione (da cui dipende l'esito della
richiesta)
¾ gestione codici di risposta e di errore
per utilizzare una specifica porta nel socket di tipo “client” sul
server è necessario usare il costruttore socket a 4 parametri:
public Socket(InetAddress
interface, int localPort)
host,
int
port,
InetAddress
funzionerà il client ftp standard con questo mini server FTP?
11
Æ implementare per esercizio il lato client di questo miniserver
FTP
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
12
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Pausa
Sessioni di esame luglio 2010
‰ giorno 8/7/2010 aula L dalle ore 14.10
‰ giorno 20/7/2010 aula L dalle ore 14.10
Pausa / Questionario
‰ il progetto deve essere consegnato almeno 10 giorni
prima dell’esame orale
‰ il progetto (funzionante) deve comprendere oltre che i
sorgenti, anche una breve relazione esplicativa
‰ le modalità complete di iscrizione
compariranno sul sito del corso
13
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
14
JAVA Collections Framework
Telematica II – A.A. 2009-2010
all’esame
a cura di Pascoschi Giovanni
La Standard Template Library in C++ (STL)
La Standard Template Library (STL) comprende tre tipologie di componenti:
¾ Contenitori (p.e. vector, list, map)
¾ Iteratori
¾ Algoritmi
Collections Framework
I contenitori sono strutture dati come vettori, liste, pile, code e mappe,
implementati con il meccanismo dei template, in grado di memorizzare
oggetti di qualsiasi tipo
Gli iteratori sono puntatori utilizzati per accedere e manipolare gli oggetti
memorizzati nei contenitori in maniera semplificata
Gli algoritmi comprendono funzioni d’utilità per il conteggio, l’ordinamento,
la ricerca, ed altre operazioni standard sui contenitori.
Æ La risposta JAVA alla STL-C++ è la Collections Framework
15
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
16
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
JAVA Framework Collections
JAVA Framework Collections - tipologia
‰ Collection, Iterator
‰ Lists, ListIterator
List
ArrayList
LinkedList
‰ Stack
Framework (a livello software): “... is a general system of
components and architectural solutions that provides
development tools to programmers for use with a relatively
wide range of applications” Æ soluzioni architetturali utili ai
programmatori
‰ Queue, PriorityQueue
Collection: “... is any collection of elements ....” Æ insieme di
elementi (oggetti) utili nella gestione a livello software
17
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
‰ Sets
Set
TreeSet
HashSet
18
JAVA Framework Collections - gerarchia
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
‰ Maps
Map
TreeMap
HashMap
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Generics JAVA
‰ prima della versione JAVA 5 le collections usavano il tipo object
(tipo generale di oggetto)
‰ a partire da JAVA ver.5, una collection contiene oggetti di uno
specifico tipo. Una classe o interfaccia collection puo’ usare il tipo di
oggetto come “parametro” Æ E è il tipo di oggetto (p.e. E = String
oppure Auto, Dipendente, ecc) Æ si parla in questo caso di generics
(in maniera analoga alle classi Template in C++)
Collection<E>
List<E>
Stack<E>
Set<E>
‰ le Colletions Framework sono
costruite sulla base di classi
astratte
rappresentate
da
interfacce che le descrivono in
base alle operazioni da esse
supportate
19
‰ tutte queste classi ed interfacce
fanno
parte
del
package
java.util. I nomi in corsivo
riguardano le interfacce.
‰ una map (mappa / array parallelo), che è una specie di dizionario
(chiave / valore), considera due parametri come tipo di oggetto:
Map<K,V>
20
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
La classe ArrayList #1
La classe ArrayList #2
‰ i metodi principali di un ArrayList sono:
‰ un ArrayList<E> rappresenta una lista come un array dinamico di
oggetti di tipo E , cioè che si ridimensiona quando è pieno (è simile
al vector della STL C++)
¾
void add(int indice, E ogg) Æ inserisce l’oggetto di classe E nella lista
in posizione “indice”Æ gli elementi successivi vengono
shiftatiÆnessun elemento è sovrascritto
‰ fornisce un accesso random agli elementi
¾
E get(int indice) Æ restituisce l’oggetto memorizzato nella lista in
posizione “indice”
¾
int indexOf(Object ogg) Æ restituisce l’indice della prima istanza di
ogg nell’elenco. Se ogg non esiste, restituisce -1
¾
E remove(int indice) Æ elimina l’oggetto nella posizione “indice”Æ gli
altri elementi vengono scalati/compressi
¾
E set(int indice, E ogg) Æ assegna ogg all’elemento presente nella
posizione “indice” sovrascrivendolo
¾
List<E> subList(int inizio, int fine) Æ restituisce un elenco/lista di
elementi tra inizio e fine
‰ implementa tutti i metodi di List<E>
‰ da non confondersi con LinkedList Æ lista doppiamente linkata
circolare
ArrayList<String> al = new ArrayList<String>( );
21
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
22
Iteratori #1
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Iteratori #2
‰ un iteratore (iterator) può essere immaginato come un indice posto
tra due elementi consecutivi
‰ un iteratore è un oggetto che aiuta a scorrere tutta la collection
(ossia processare tutti gli elementi in sequenza) Æ esempio del
foreach
‰ all’atto della costruzione, si trova prima del primo elemento
for(tipo var-itr : collection) {
istruzioni1;
........
};
‰ la chiamata al metodo next() provoca l’avanzamento alla
posizione successiva (se esiste) o la generazione di un’eccezione
‰ remove() elimina l’ultimo elemento restituito (quello che
precede il puntatore, se esiste)
23
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
for(int x: numeri) {
sum += x;
}
24
Telematica II – A.A. 2009-2010
// scorre tutto l’array numeri
a cura di Pascoschi Giovanni
Iteratori #3
Algoritmi nella JCF
‰ nella classe generale Collections esistono diversi algoritmi già
prontiÆ quelli piu’ noti sono (metodi statici):
‰ come si crea un iterator? Æ si richiama il metodo iterator di ciascuna
collection
Collections.sort(argList); // ordina in ordine crescente
Collections.reverse(argList); // inverte l’ordine degli elementi
Collections.shuffle(argList); // elementi in ordine pseudocasuale
List<String> al = new ArrayList<String>( );
Iterator<String> itr = al.iterator ( );
‰ per usare gli iteratori o si usano i cicli foreach, oppure si usa il
metodo hasNext( ) per verificare se esiste un elemento successivo
nella collection
System.out.println(itr.next( )); // stampa l’elemento successivo nella
lista
25
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
26
Map nella JCF
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Map – principali metodi nella JCF
‰ l’implementazione piu’ usata è data da una classe HashMap Æ
‰ una map (interface) non è una collection intesa come insieme
singolo Æ è una corrispondenza tra un insieme di chiavi e un
insieme di valori
Map<String,Integer> argCount = new HashMap<String,Integer>( );
‰ i metodi piu’ usati sono:
‰ solo un unico valore puo’ corrispondere a una determinata chiave;
diverse chiavi possono essere mappate sullo stesso valore
keys
27
Telematica II – A.A. 2009-2010
values
a cura di Pascoschi Giovanni
28
¾
V get(Object k) Æ restituisce il valore V associato ad un oggetto chiave k
¾
V put(K k, V v) Æ inserisce una voce nella mappa sovrascrivendo il
valore precedente associato alla chiave k Æ restituisce null se la chiave
non esisteva, altrimenti il valore precedente
¾
boolean isEmpty( ) Æ restituisce true se la map è vuota, altrimenti false
¾
void clear( ) Æ elimina tutte le coppie chiave/valore
¾
V remove (Object k) elimina la voce con chiave k
¾
int size( ) Æ restituisce il numero di coppie chiave/valore presenti nella
mappa
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercitazione 8 – JAVA Collections Framework
Riepilogo della lezione
Esercitazione/Laboratorio 5
Gestione protocollo FTP su server
Esercitazione sulla gestione del protocollo FTP lato server
JAVA Collections Framework (panoramica)
Esercitazione sulle JAVA Collections Framework
Viene illustrato un esercizio CollectionsExample sulla
gestione delle Collections Framework (esercitazione 6FS)
29
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
30
Fine della lezione
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercizio n.12
Realizzare un’ applicazione FTP client che possa interfacciarsi con il mini
server FTP visto a lezione
Domande?
31
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
32
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni
Esercizio n.13
33
Telematica II – A.A. 2009-2010
Esercizio n.14
a cura di Pascoschi Giovanni
34
Telematica II – A.A. 2009-2010
a cura di Pascoschi Giovanni