diff --git a/Readme.md b/Readme.md
index 2fbbc381f5a6e091ba1d447ba3cb9f49da12e697..e711a227ec5539020cc656364c89ee0ae40e1dfb 100644
--- a/Readme.md
+++ b/Readme.md
@@ -11,7 +11,9 @@ retournés par le côté serveur.
 <valeur> ::= <char> | <chaine> | [0-9]* | [0-9]* "." [0-9]*
 <chaine> ::= "<char>*"
 <char> ::= un charactère alphanumérique
-<reponse> ::= "resultat:" <type> "," <valeur>
+
+<exception> ::= "<char>*" | "none"
+<reponse> ::= "resultat:" <type> "," <valeur> "|" "Exception:" <exception> 
 ```
 
 ## Exemples de ce qui devra être transmis
@@ -20,4 +22,6 @@ Voici deux exemples de messages transmis par le côté client pour une
 invocation :
 
   + CALL:nombreMots:param[string,"Travail à la  chaîne"]
+  EXEMPLE: "resultat:int,4|Exception:none" 
+  
   + CALL:compteChar:param[string,"arrête ton char"]:param[char,"a"]
diff --git a/src/fr/ulille/iut/m4102/AccesService.java b/src/fr/ulille/iut/m4102/AccesService.java
index bfb1c19963ad2339267142b350c27c3167f2ef59..8041a6c2d9173fdf0d2e48d5a7ccd27855b91dbe 100644
--- a/src/fr/ulille/iut/m4102/AccesService.java
+++ b/src/fr/ulille/iut/m4102/AccesService.java
@@ -1,5 +1,11 @@
 package fr.ulille.iut.m4102;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ServerSocket;
+import java.net.Socket;
 import java.util.Arrays;
 
 /**
@@ -11,18 +17,25 @@ import java.util.Arrays;
  * renverra le résultat sous forme de chaîne
  * de caractères.
  */
-public class AccesService {
+public class AccesService implements Runnable {
 	private AlaChaine alc;
-
-	public AccesService() {
+	private Socket s;
+	
+	public AccesService() throws IOException {
+		alc = new AlaChaine();
+	}
+	public AccesService(Socket sock) {
 		alc = new AlaChaine();
+		s = sock;
 	}
 
-	public String traiteInvocation(String invocation) {
 
+	public String traiteInvocation(String invocation) {
+		System.out.println("REQUEST: " + invocation);
 		String[] invocDivisee = invocation.replace("param[","").replace("]","").split(":");
 		String nomMethode = invocDivisee[1];
 		String[] paramTab = Arrays.copyOfRange(invocDivisee, 2, invocDivisee.length);
+		
 		String resultatFormate = "resultat:";
 
 		switch(nomMethode) {
@@ -57,8 +70,31 @@ public class AccesService {
 			break;
 		}
 		
+		System.out.println("RETURN: " + resultatFormate);
 		return resultatFormate;
 
 	}
+	
+	
+	public void traiteRequete() throws IOException {
+		BufferedReader reception = new BufferedReader(new InputStreamReader(s.getInputStream()));
+		PrintWriter envoi =  new PrintWriter(s.getOutputStream(), true);
+		String str = traiteInvocation(reception.readLine());
+		System.out.println(str);
+		envoi.println(str);
+		reception.close();
+		envoi.close();
+	}
+	
+	public void run() {
+		PrintWriter envoi = null;
+		try {
+			envoi = new PrintWriter(s.getOutputStream(), true);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		envoi.println("Salut client");
+	}
 
 }
diff --git a/src/fr/ulille/iut/m4102/Client.java b/src/fr/ulille/iut/m4102/Client.java
index f4016046af88ec739060d79e07bf1332cf83c55e..706e01b6529294848b0051492bce69b5f9ce9c7c 100644
--- a/src/fr/ulille/iut/m4102/Client.java
+++ b/src/fr/ulille/iut/m4102/Client.java
@@ -13,49 +13,50 @@ import java.net.UnknownHostException;
  * au serveur via la socket
  */
 public class Client {
-    private Socket clientSocket = null;
-    private PrintWriter envoi = null;
-    private BufferedReader reception = null;
-
-    // La classe doit être instanciée avec le nom
-    // ou l'adresse de la machine où se trouve le serveur
-    // ainsi que le numéro de port qu'il utilise.
-    public Client(String host, int port) {
-	try {
-	    // Instanciation de la socket client
-	    // S'il n'y a pas d'exception, la connexion est établie
-	    clientSocket = new Socket(host, port);
-	}
-	catch (UnknownHostException e) {
-	    e.printStackTrace();
-	    System.exit(1);
-	}
-	catch (IOException e) {
-	    e.printStackTrace();
-	    System.exit(1);
+	private Socket clientSocket = null;
+	private PrintWriter envoi = null;
+	private BufferedReader reception = null;
+
+	// La classe doit être instanciée avec le nom
+	// ou l'adresse de la machine où se trouve le serveur
+	// ainsi que le numéro de port qu'il utilise.
+	public Client(String host, int port) {
+		try {
+			// Instanciation de la socket client
+			// S'il n'y a pas d'exception, la connexion est établie
+			clientSocket = new Socket(host, port);
+		} catch (UnknownHostException e) {
+			e.printStackTrace();
+			System.exit(1);
+		} catch (IOException e) {
+			e.printStackTrace();
+			System.exit(1);
+		}
+
+		try {
+			// Récupération d'un flux orienté texte pour écrire dans la socket
+			envoi = new PrintWriter(clientSocket.getOutputStream(), true);
+
+			// Récupération d'un flux orienté texte pour lire dans la socket
+			reception = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
+		} catch (IOException e) {
+			e.printStackTrace();
+			System.exit(1);
+		}
 	}
-	
-	try {
-	    // Récupération d'un flux orienté texte pour écrire dans la socket
-	    envoi = new PrintWriter(clientSocket.getOutputStream(), true);
-	    
-	    // Récupération d'un flux orienté texte pour lire dans la socket
-	    reception = new BufferedReader(
-					   new InputStreamReader(clientSocket.getInputStream()));
-	} catch (IOException e) {
-	    e.printStackTrace();
-	    System.exit(1);
+
+	public String envoyer(String message) {
+		envoi.println(message);
+		try {
+			return reception.readLine();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
 	}
-    }
-    
-    public String envoyer(String message) {
-	envoi.println(message);
-	
-	try {
-	    return reception.readLine();
-	} catch (IOException e) {
-	    e.printStackTrace();
+
+	public Socket getClientSocket() {
+		return clientSocket;
 	}
-	return null;
-    }
-}
+
+}
\ No newline at end of file
diff --git a/src/fr/ulille/iut/m4102/Intermediaire.java b/src/fr/ulille/iut/m4102/Intermediaire.java
index bdcde113b00768df9abe215874226e91141f717f..1a740fec3ceff01c7c65362db0b58c577664d3b0 100644
--- a/src/fr/ulille/iut/m4102/Intermediaire.java
+++ b/src/fr/ulille/iut/m4102/Intermediaire.java
@@ -1,5 +1,7 @@
 package fr.ulille.iut.m4102;
 
+import java.io.IOException;
+
 /**
  * Cette classe introduit un intermédiaire entre la classe utilisatrice
  * et l'implémentation du traitement des chaînes.
@@ -10,23 +12,35 @@ package fr.ulille.iut.m4102;
  * appelait directement la classe AlaChaine.
  */
 public class Intermediaire implements AlaChaineInterface {
-	private AlaChaine alc;
+	
 	private AccesService aService;
-	public Intermediaire() {
+	private Client client;
+	public Intermediaire() throws IOException {
 
 		aService = new AccesService();
-		alc = new AlaChaine();
+		//alc = new AlaChaine();
 	}
 
 	public int nombreMots(String chaine) {
 		/*  System.out.println("Méthode: NombreMots ; Paramètre(String): "+chaine +" ; Resultat(int): "+alc.nombreMots(chaine));
 	return alc.nombreMots(chaine); */
+		
+		client = new Client("localhost", 8080);
 
 		String invocation = "Call:nombreMots:param[string," + chaine + "]";
 		String resInv = aService.traiteInvocation(invocation);
 		String valeur = resInv.split(":")[1].split(",")[1];
+		
+		String res = null;
+		try {
+			res = client.envoyer(resInv);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		System.out.println(res);
 
-
+		
 		return Integer.parseInt(valeur);
 
 
@@ -35,11 +49,23 @@ public class Intermediaire implements AlaChaineInterface {
 	public String asphyxie(String chaine) throws PasDAirException {
 		/* System.out.println("Méthode: asphyxie ; Paramètre(String): "+chaine +" ; Resultat(String): "+alc.asphyxie(chaine)+" ; PasDAirException: Déjà asphyxiée");
 	return alc.asphyxie(chaine);*/
-
+		
+		client = new Client("localhost", 8080);
+		
 		String invocation = "Call:asphyxie:param[string," + chaine + "]";
 		String resInv = aService.traiteInvocation(invocation);
 		String valeur = resInv.split(":")[1].split(",")[1];
+		
+		String res = null;
+		try {
+			res = client.envoyer(resInv);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		System.out.println(res);
 
+		
 		return valeur;
 
 	}
@@ -47,22 +73,50 @@ public class Intermediaire implements AlaChaineInterface {
 	public String leetSpeak(String chaine) {
 		/* System.out.println("Méthode: leetSpeak ; Paramètre(String): "+chaine +" ; Resultat(String): "+alc.leetSpeak(chaine));
 	return alc.leetSpeak(chaine);*/
+		
+		client = new Client("localhost", 8080);
+		
 		String invocation = "Call:leetSpeak:param[string," + chaine + "]";
-		String res = aService.traiteInvocation(invocation);
-		String valeur = res.split(":")[1].split(",")[1];
+		String resInv = aService.traiteInvocation(invocation);
+		String valeur = resInv.split(":")[1].split(",")[1];
+		
+		String res = null;
+		try {
+			res = client.envoyer(resInv);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		System.out.println(res);
+
+		
 		return valeur;
 	}
 
 	public int compteChar(String chaine, char c) {
 		/* System.out.println("Méthode: compteChar ; Paramètre(String, char): "+chaine+", "+c+" ; Resultat(int): "+alc.compteChar(chaine, c));
 	return alc.compteChar(chaine, c);*/
+		
+		client = new Client("localhost", 8080);
+		
 		String invocation = "Call:compteChar:param[string, " + chaine + "]:param[char," + c + "]";
-		String res = aService.traiteInvocation(invocation);
-		String valeur = res.split(":")[1].split(",")[1];
-	
-			return Integer.parseInt(valeur);	
+		String resInv = aService.traiteInvocation(invocation);
+		String valeur = resInv.split(":")[1].split(",")[1];
+
+		String res = null;
 		
+		try {
+			res = client.envoyer(resInv);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		System.out.println(res);
+
+
+		return Integer.parseInt(valeur);	
+
 	}	
-	
+
 
 }
diff --git a/src/fr/ulille/iut/m4102/Serveur.java b/src/fr/ulille/iut/m4102/Serveur.java
index 41825360e88c9fbf1e2530a5c01d9762f7c35ca2..db7b46eefb23e63966db27d7ad2ff6e64cfc3362 100644
--- a/src/fr/ulille/iut/m4102/Serveur.java
+++ b/src/fr/ulille/iut/m4102/Serveur.java
@@ -8,52 +8,57 @@ import java.io.PrintWriter;
 import java.net.ServerSocket;
 import java.net.Socket;
 
+
 /**
- * Cette classe démarre une socket serveur et
- * attend les connexions des clients.
- * Quand un client se connecte, elle délègue
- * le travail à la classe AccesService.
+ * Cette classe démarre une socket serveur et attend les connexions des clients.
+ * Quand un client se connecte, elle délègue le travail à la classe
+ * AccesService.
  */
 public class Serveur {
-    private ServerSocket serveurSocket = null;
-    
-    public Serveur(int port) {
-	try {
-	    // Création de la Socket Serveur qui permettra d'attendre les connexions
-	    serveurSocket = new ServerSocket(port);
-	} catch (IOException e) {
-	    e.printStackTrace();
-	    System.exit(1);
-	}
-    }
-    
-    public void miseEnService() {
-	Socket unClient = null;
+	private ServerSocket serveurSocket = null;
 	
-	// Boucle d'attente des clients
-	while (true ) {
-	    try {
-		// accept() est bloquant. Quand on en sort, on a un nouveau
-		// client avec une nouvelle instance de socket
-		unClient = serveurSocket.accept();
-	    } catch (IOException e) {
-		e.printStackTrace();
-		System.exit(1);
-	    }
-
-	    // quand on a un client, on peut instancier la
-	    // classe AccesService et lui demander de traiter
-	    // la requête.
-
-	    //AccesService as = new AccesService(unClient);
-	    //as.traiteRequete();
+	public Serveur(int port) {
+		try {
+			// Création de la Socket Serveur qui permettra d'attendre les connexions
+			serveurSocket = new ServerSocket(port);
+		} catch (IOException e) {
+			//System.out.println(e.getMessage());
+			e.printStackTrace();
+			System.exit(1);
+		}
 	}
-    }
-    
-    // La classe doit être exécutée en passant le port serveur à utiliser en paramètre
-    public static void main(String[] args) {
-	Serveur serveur = new Serveur (Integer.parseInt(args[0]));
-	
-	serveur.miseEnService();
-    }   
-}
+
+	public void miseEnService() {
+		Socket unClient = null;
+
+		// Boucle d'attente des clients
+		while (true) {
+			try {
+				// accept() est bloquant. Quand on en sort, on a un nouveau
+				// client avec une nouvelle instance de socket
+				unClient = serveurSocket.accept();
+			} catch (IOException e) {
+				e.printStackTrace();
+				System.exit(1);
+			}
+
+			// quand on a un client, on peut instancier la
+			// classe AccesService et lui demander de traiter
+			// la requête.
+
+			 AccesService as = new AccesService(unClient);
+			 try {
+				as.traiteRequete();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	// La classe doit être exécutée en passant le port serveur à utiliser en
+	// paramètre
+	public static void main(String[] args) {
+		Serveur serv = new Serveur(Integer.parseInt(args[0]));
+		serv.miseEnService();
+	}
+}
\ No newline at end of file
diff --git a/src/fr/ulille/iut/m4102/Utilisatrice.java b/src/fr/ulille/iut/m4102/Utilisatrice.java
index ebd29b4dec386f7b9ae8b39a11f2dad59f6b64de..22556420411c2f17fe26b32ec174579a7faa2e63 100644
--- a/src/fr/ulille/iut/m4102/Utilisatrice.java
+++ b/src/fr/ulille/iut/m4102/Utilisatrice.java
@@ -13,7 +13,7 @@ public class Utilisatrice {
 	// utilisation normale.
 	// On instancie la classe Intermediaire au lieu
 	// d'instancier directement AlaChaine.
-	Intermediaire i = new Intermediaire();
+	AlaChaineInterface i = new Intermediaire();
 	
 	System.out.println(i.nombreMots("Travail à la  chaîne"));