L'objectif de ce TP est l'initiation à la programmation répartie. Il consiste à programmer une application typique comportant de la répartition à l'aide de Socket. Vous devez programmer les parties "client" et "serveur" de cette application à l’aide du langage JAVA et la faire exécuter dans un environnement fait de plusieurs machines virtuelles. Ces machines pouvant être sur une seule machine physique (plusieurs JVM locales) ou sur plusieurs machines distantes.
L'objectif est la programmation d’un serveur FTP.
File Transfert Protocol est un Protocole pour le transfert de fichiers.
Il définit les règles de transfert de fichiers entre deux ordinateurs
connectés sur un reseau. Lorsqu'un utilisateur transfert à l'aide de ce
protocole des programmes stockés sur un serveur de fichiers (serveur
FTP), il utilise sur sa machine un logiciel spécialisé, dit un client
FTP. Dans notre cas, le client FTP sera simpliste.
On vous demande de comprendre et d’exécuter l’application suivante.
Cette application est un simple serveur qui retourne la date au client. A
la fin de l’étape 1, on vous donne des liens utiles : le tutorial
socket de sun et l’API java.
DaytimeServer.java
DaytimeClient.java
Tutorial socket
Le serveur FTP est un serveur programmé en JAVA à l’aide de sockets en mode TCP.
Au lancement du serveur, on spécifie en ligne de commande :
· Le port sur lequel écoute le serveur
· La racine du système de
fichier que gère le serveur. C’est le répertoire courant initial.
Le serveur fonctionne en mode connecté. Le serveur répond aux requêtes suivantes :
· GET_REQUEST : Permet de récupérer, dans le répertoire courant
du serveur, un fichier identifier par son nom. Le fichier sera stocké
dans le répertoire courant du client. Cette requête contient le nom du
fichier à télécharger. Le serveur retourne au client un message
GET_REPLY qui contient le contenu du fichier et ou un message d’erreur.
· PUT_REQUEST : Permet d’écrire dans le répertoire courant du
serveur un fichier identifier par son nom du coté du client. Le fichier
sera stocké dans le répertoire courant du serveur. Cette requête
contient le nom du fichier à télécharger. C’est l’inverse de
GET_REQUEST. Le serveur retourne au client un message PUT_REPLY qui
acquitte que le téléchargement du fichier sur le serveur a bien été
effectué ou non.
Le client FTP est un programme java qui envoie une commande au
serveur et affiche le résultat. Ce client prend en paramètre de
lancement :
· Le nom de la machine du serveur
· Le port du serveur FTP
· La commande à lancer et ces arguments. A chaque fois qu’on
voudra lancer une commande, il faudra lancer un nouveau client.
Par exemple :
· java ClientFtp electron.inria.fr 4098 GET_REQUEST toto.txt : Le
client récupère le fichier toto.txt et le stocke localement.
· java ClientFtp electron.inria.fr 4098 PUT_REQUEST popo.txt : Le
client envoie le fichier popo.txt au serveur qui le stocke dans son
répertoire courant.
On vous demande de modifier le serveur FTP pour qu’il réponde aux requêtes suivantes :
· GET_REQUEST : Permet de récupérer dans le répertoire courant du
serveur un fichier identifier par son nom. Le fichier sera stocké dans
le répertoire courant du client. Cette requête contient le nom du
fichier à télécharger. Le serveur retourne au client un message
GET_REPLY qui contient le contenu du fichier et ou un message d’erreur.
· PUT_REQUEST : Permet d’écrire dans le répertoire courant du
serveur un fichier identifier par son nom du coté du client. Le fichier
sera stocké dans le répertoire courant du serveur. Cette requête
contient le nom du fichier à télécharger. C’est l’inverse de
GET_REQUEST. Le serveur retourne au client un message PUT_REPLY qui
acquitte que le téléchargement du fichier sur le serveur a bien été
effectué ou non.
· CD_REQUEST : Permet de changer le répertoire courant sur le
serveur. Cette requête contient le chemin d’accès. C’est l’équivalent de
la commande cd <chemin>. Le serveur retourne au client un message
CD_REPLY qui acquitte que le changement de répertoire a bien été
effectué ou non.
· LS_REQUEST : Permet de lister le contenu du répertoire courant
sur le serveur. C’est l’équivalent de la commande ls. Le serveur
retourne au client un message LS_REPLY qui contient le résultat de la
commande LS et ou un message d’erreur.
· PWD_REQUEST : Permet d’afficher le répertoire courant. C’est
l’équivalent de la commande pwd. Le serveur retourne au client un
message PWD_REPLY qui contient le résultat de la commande PWD et ou un
message d’erreur.
On vous demande de programmer un programme client FTP qui permet de
lancer des commandes FTP sous forme texte (comme dans un shell).
Le même client FTP pourra servir à lancer plusieurs commandes FTP
successives sur la même connexion TCP (Le client ne se reconnecte pas à
chaque requêtes). Ce client ne prend pas paramètre de lancement. Les
commandes que l’on peut lancer en ligne de commande dans ce client FTP
sont les suivantes :
· Connect <nom_machine,
port> : le client se connecte au serveur et affiche le résultat.
· Ls : appelle la
commande ls à distance sur le serveur via LS_REQUEST et affiche le
résultat.
· Pwd : appelle la
commande pwd à distance sur le serveur via PWD_REQUEST et affiche le
résultat.
· Cd <chemin> :
effectue le cd à distance sur le serveur via CD_REQUEST et affiche
le résultat.
· Get <nom_fichier> : récupère le fichier à distance sur le
serveur via GET_REQUEST, stocke le fichier localement et affiche le
résultat.
· Put <nom_fichier> : envoie le fichier, présent
localement, sur le serveur via PUT_REQUEST, stocke le fichier sur le
serveur et affiche le résultat.