TP CAR n°1

Programmation répartie avec ses socket

Réalisation d'un serveur FTP sur le réseau

Objectif

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.


Spécification

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.


ETAPE 1 : Familiarisation avec les sockets java

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
 

ETAPE 2 : Un FTP simple

Le serveur FTP simple

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 simple

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.

ETAPE 3 :

Le serveur FTP

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.

Le Client FTP

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.