Skip to content

alibouhjira/FTP-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Implementation d'un client ftp en java

Ali Bouhjra 27/01/2024

Utilisation

Ce projet, codé dans le cadre du cours de system repartie, a pour but de se connecter a un serveur ftp distant (e.g. "ftp.ubuntu.com") et de lister en profondeur tous ses répertoires.

Pour ce faire, il suffit de taper la commande java -jar .\target\SR1TreeFtp-1.0-SNAPSHOT.jar suivi d'un nom de domaine ou d'une ip valide. Il est possible d'ajouter optionnellement la profondeur que l'on veut explorer.

Pour afficher par exemple le dossier racine du serveur ftp.ubuntu.com la commande est la suivante :

 .\target\SR1TreeFtp-1.0-SNAPSHOT.jar ftp.ubuntu.com 0

Suite à cette commande, une identification sera requise. Dans le cas où l'identification auprès du serveur échouerait, la connexion se fera en mode anonyme. Finalement, le programme affichera les dossiers et leurs contenus dans la sortie standard.

Architecture

L'architecture de ce projet est très simple, elle est décomposée en deux classes :

  • Serveur : classe qui contient toutes les méthodes pour interagir avec le serveur FTP distant, envoyer des commandes, écouter les réponses, lister les répertoires.

  • FTPclient : la classe principale qui appelle les méthodes de la classe serveur dans le main.

Ceci est l'essentiel de l'architecture auquel sont ajoutées les classes exceptions et tests unitaires.

Code sample

méthode récursive qui affiche les répertoires en profondeur.

void listDirectories(Server dataserver, String currentDirectory) throws IOException, ServerConnectionException {
        
        
        if (profondeur > profondeurMax) {
            return;
        }
        profondeur++;
        String response;
        //ecoute la reponse de LIST sur le data server
        while ((response = dataserver.receiveResponse()) != null) {
            //affichage en arbre
            for (int i = 0; i < profondeur; i++) System.out.print("  ");
            System.out.print("|");
            for (int i = 0; i < profondeur; i++) System.out.print("_");
            //extraction du nom du repertoire ou fichier de la reponse
            String directoryName = response.substring(response.lastIndexOf(" ") + 1);
            //affichage du nom
            System.out.println(directoryName);
            //test si nous sommes sur un repertoire 
            if (response.startsWith("d")) {
                //list le contenu de ce repertoire et renvois le serveur a ecouter 
                Server dataServer2 = changeWorkingDirectoryAndList(currentDirectory + directoryName + "/");
                //appel recursif pour afficher le contenu reçu 
                if (dataServer2 != null) listDirectories(dataServer2, currentDirectory + directoryName + "/");
            }
        }
        dataserver.disconnect();
        profondeur--;
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages