diff --git a/FTPServer/pom.xml b/FTPServer/pom.xml
index 9c066a3d8361c0d96d5408cfa303e01dd20c8914..f15187b9285f6ffd343d6e112f862604e64b5b35 100644
--- a/FTPServer/pom.xml
+++ b/FTPServer/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>org.example</groupId>
     <artifactId>FTPServer</artifactId>
-    <version>1.0-SNAPSHOT</version>
+    <version>1.3-SNAPSHOT</version>
 
     <properties>
         <maven.compiler.source>1.8</maven.compiler.source>
diff --git a/FTPServer/src/main/java/ftp/ClientFtp.java b/FTPServer/src/main/java/ftp/ClientFtp.java
index 4d3f1a398dbd4be30734653d906bf58fdfa00cb6..08f1594a0aea7b43154ed8336e20603941e2a2de 100644
--- a/FTPServer/src/main/java/ftp/ClientFtp.java
+++ b/FTPServer/src/main/java/ftp/ClientFtp.java
@@ -30,12 +30,18 @@ public class ClientFtp {
         this.printer = new PrintWriter( out, true );
     }
 
-    public void connect( Client client ) throws IOException {
+    public void connect( Client client ) throws IOException, FailedAuthentification {
         this.printer.println( "USER " + client.getUser() + "\r\n" );
         this.printer.println("PASS " + client.getPassword() + "\r\n");
         System.out.println(readMessageServer());
         System.out.println(readMessageServer());
-        System.out.println(readMessageServer());
+        String succesConnection =  readMessageServer();
+
+        if (!succesConnection.startsWith("230")) {
+            throw new FailedAuthentification("Connection non reussi");
+        }
+        System.out.println(succesConnection);
+
     }
 
     public String readMessageServer() throws IOException {
diff --git a/FTPServer/src/main/java/ftp/FailedAuthentification.java b/FTPServer/src/main/java/ftp/FailedAuthentification.java
new file mode 100644
index 0000000000000000000000000000000000000000..0f7308ac94c78c80da77ad11d943efb692a2eae3
--- /dev/null
+++ b/FTPServer/src/main/java/ftp/FailedAuthentification.java
@@ -0,0 +1,7 @@
+package ftp;
+
+public class FailedAuthentification extends Throwable {
+    public FailedAuthentification(String message) {
+        super(message);
+    }
+}
diff --git a/FTPServer/src/main/java/ftp/ServerConnect.java b/FTPServer/src/main/java/ftp/ServerConnect.java
index 097ae7e259dba49def8e33b5499fff9cf160eec5..81cea3a4bea44207933464041767908dcef5147a 100644
--- a/FTPServer/src/main/java/ftp/ServerConnect.java
+++ b/FTPServer/src/main/java/ftp/ServerConnect.java
@@ -18,12 +18,17 @@ public class ServerConnect {
         if (args.length > 0){
             String host = args[0];
             ServerConnect.host = host;
-            Socket socketCommand = new Socket(host , ServerConnect.port);
-            ClientFtp connection = new ClientFtp(socketCommand);
-            Client client = new Client("anonymous", "anonymous");
-            connection.connect(client);
+            try {
+                Socket socketCommand = new Socket(host, ServerConnect.port);
+                ClientFtp connection = new ClientFtp(socketCommand);
+                Client client = new Client("anonymous", "anonymous");
+                connection.connect(client);
+
+                getTree(connection, " ");
+            } catch (IOException | FailedAuthentification e) {
+                e.printStackTrace();
+            }
 
-            getTree(connection, " ");
 
         }
 
diff --git a/README.md b/README.md
index 0f68f574ee49b41def07dff94ee5ac739f2b38f8..e5964d1b6105f5ace4eb72d996a40b14729e82f0 100644
--- a/README.md
+++ b/README.md
@@ -14,4 +14,116 @@ Date : 03 fevrier 2021
 
 Ce projet permet de mettre en œuvre une commande shell permettant d'afficher sur la sortie standard d'un terminal  l'arborescence d'un répertoire distant accessible via le protocole applicatif File Transfer Protocol (FTP). Le rendu de l'arborescence distante s'inspirera du formalisme utilisé la commande tree de Linux.
 
+## Compilation
 
+```bash
+mvn package permet de compiler le code java
+```
+
+## Exécution
+
+```bash
+    java -jar <target>/FTPServer-1.3-SNAPSHOT.jar <nom du serveur>
+```
+
+## Architecture du projet
+
+### Diagramme de classe
+
+![diagramme de classe][diagramme_uml.PNG]
+
+### Gestion d'erreurs
+
+Les erreurs sont gerées par un bloc de try catch. Si on rencontre une erreur de manière generale, l'exception IOException est declanchée. Et dans le cas precis où on n'arrive pas à se connecter au serveur, l'exception FailedAuthentification est declanchée. Nous pouvons voir un exemple ci dessous.
+
+```java
+            String host = args[0];
+            ServerConnect.host = host;
+            try {
+                Socket socketCommand = new Socket(host, ServerConnect.port);
+                ClientFtp connection = new ClientFtp(socketCommand);
+                Client client = new Client("anonymous", "anonymous");
+                connection.connect(client);
+
+                getTree(connection, " ");
+            } catch (IOException | FailedAuthentification e) {
+                e.printStackTrace();
+            }
+            .......
+
+```
+
+## Code Samples
+
+Cette fonction permet de faire un parcours en profondeur de tous les dossiers d'un serveur ftp.
+
+```java
+
+public static void getTree(ClientFtp connection , String lineUp) throws IOException {
+
+        // connection en mode passif
+        Pasv commandPassive = new Pasv();
+        connection.sendCommand(commandPassive);
+        String passive = connection.readMessageServer();
+
+        // recuperation de l'adresse ip
+        String ip = commandPassive.getIp(passive);
+        // recuperation du port
+        int port = commandPassive.getPort(passive);
+
+        Socket socketServer = new Socket( ip, port );
+        // Envoie de la commande LIST
+        Command ls = new List();
+        connection.sendCommand(ls);
+
+        InputStream in = socketServer.getInputStream();
+        InputStreamReader in2 = new InputStreamReader(in);
+        BufferedReader reader = new BufferedReader(in2);
+        String content;
+
+        while ( (content = reader.readLine() ) != null){
+            System.out.println("|" + lineUp +" " + getFolderName(content) );
+            if (content.charAt(0) == 'd'){
+                // Envoie de la commande cwd
+                Command cd = new Cwd( getFolderName(content));
+                connection.sendCommand(cd);
+                String lineUp2 = lineUp + "___";
+                connection.readMessageServer();
+                connection.readMessageServer();
+                connection.readMessageServer();
+
+                // recursivite
+                getTree(connection, lineUp2 );
+
+                // Envoie de la commande cwd pour sortir
+                Command cd2 = new Cwd("..");
+                connection.sendCommand(cd);
+                connection.readMessageServer();
+            }
+
+        }
+
+    }
+```
+
+Cette fonction permet de connecter un clientFtp sur un serveur 
+
+```java
+public void connect( Client client ) throws IOException, FailedAuthentification {
+        this.printer.println( "USER " + client.getUser() + "\r\n" );
+        this.printer.println("PASS " + client.getPassword() + "\r\n");
+        System.out.println(readMessageServer());
+        System.out.println(readMessageServer());
+        String succesConnection =  readMessageServer();
+
+        if (!succesConnection.startsWith("230")) {
+            throw new FailedAuthentification("Connection non reussi");
+        }
+        System.out.println(succesConnection);
+
+    }
+```
+
+***Note : ***  
+
+Vous trouverez la demo dans le dossier docs
\ No newline at end of file
diff --git a/diagramme_uml.PNG b/diagramme_uml.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..65d3601bccdc96d9d55b603c42f7d2a0861a5c2a
Binary files /dev/null and b/diagramme_uml.PNG differ