diff --git a/Chat/clientUdp/clientUdp/ClientUdp.cs b/Chat/clientUdp/clientUdp/ClientUdp.cs
index 1b280943801d69a309cea228c2c09f1ce124eb3f..06f3a4a2b90df822b60de3ae10f9090739ff8eca 100644
--- a/Chat/clientUdp/clientUdp/ClientUdp.cs
+++ b/Chat/clientUdp/clientUdp/ClientUdp.cs
@@ -11,7 +11,7 @@ namespace ClientUdp
 {
     class ClientUdp
     {
-        const int MsgsBufferSize = 1000000;
+        const int MsgsBufferSize = 100000000;
         static string getPseudo()
         {
             String pseudo = String.Empty;
@@ -63,7 +63,7 @@ namespace ClientUdp
             {
                 //************************************************************** Initialisation
 
-                string serverIP = "130.79.81.68";    // A changer
+                string serverIP = "127.0.0.1";    // A changer
 
                 int serverPort = 17021;       // A changer
                 bool continuer = true;
@@ -78,56 +78,49 @@ namespace ClientUdp
                 // Liaison de la socket au point de communication
                 clientSocket.Bind(new IPEndPoint(IPAddress.Any,58600));
 
-                while (continuer)
-                {
-                    // Création du EndPoint serveur
-                    EndPoint serverEP = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
-
-                    //appel de la fonction qui renvoie le pseudo lu au clavier avec les vérifications nécessaires
-                    string pseudo = getPseudo();
-                    //appel de la fonction qui renvoie le message lu au clavier avec les vérifications nécessaires
-                    string msg = getMessage();
+                // Création du EndPoint serveur
+                EndPoint serverEP = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
 
+                //************************************************************** Communications
 
+                // Création de la demande d'abonnement et du buffer associé
+                ChatMessage chat_subscribe = new ChatMessage(Commande.SUBSCRIBE, CommandeType.REQUETE, "", "");
+                byte[] bufferSubscr = chat_subscribe.GetBytes();
 
-                    //création du message en POST et en GET de type REQUETE avec le message entré au clavier plus le pseudo entré également au clavier
-                    ChatMessage chat_message = new ChatMessage(Commande.POST, CommandeType.REQUETE, msg, pseudo);
-                    ChatMessage chat_messagePost = new ChatMessage(Commande.GET, CommandeType.REQUETE, "", "");
+                // Envoi de la demande d'abonnement
+                clientSocket.SendTo(bufferSubscr, 0, bufferSubscr.Length, SocketFlags.None, serverEP);
 
-
-                    //************************************************************** Communications
-
-                    // Encodage string dans un buffer de bytes en ASCII
-                    //transformation des messages en Bytes et placer dans les différents buffer
-                    //création du buffer qui va réceptionner la liste de messages
-                    byte[] buffer = chat_message.GetBytes();
-                    byte[] bufferPost = chat_messagePost.GetBytes();
+                while (continuer)
+                {
+                    // création du buffer qui va réceptionner la liste de messages
                     byte[] bufferGet = new byte[MsgsBufferSize];
- 
-                    //Console.WriteLine("Taille buffer : " + buffer.Length);
 
-                    // Envoie du message POST au serveur
-                    clientSocket.SendTo(buffer, 0, buffer.Length, SocketFlags.None, serverEP);
-                    Thread.Sleep(3000);
-
-                    // Envoie du message GET au serveur
-                    clientSocket.SendTo(bufferPost, 0, bufferPost.Length, SocketFlags.None, serverEP);
                     //réception de la liste des messages 
                     int nBytes = clientSocket.ReceiveFrom(bufferGet, bufferGet.Length, SocketFlags.None, ref serverEP);
                     //désérialisation de la chaîne comportant les messages avec pseudo
-                    string messages = System.Text.Encoding.ASCII.GetString(bufferGet,0, nBytes);
+                    string messages = System.Text.Encoding.ASCII.GetString(bufferGet, 0, nBytes);
                     string[] listMessages = messages.Split('/');
                     //affichage des messages 
-                    foreach(string mess in listMessages)
-                    { 
+                    Console.WriteLine("");
+                    foreach (string mess in listMessages)
+                    {
                         Console.WriteLine(mess);
                     }
-                
 
-                    /*Console.WriteLine("Nouveau message envoye vers "
-                        + serverEP
-                        + " (" + nBytes + " octets)"
-                        + ": \"" + msg + "\"");*/
+                    //appel de la fonction qui renvoie le pseudo lu au clavier avec les vérifications nécessaires
+                    string pseudo = getPseudo();
+                    //appel de la fonction qui renvoie le message lu au clavier avec les vérifications nécessaires
+                    string msg = getMessage();
+
+                    //création du message en POST de type REQUETE avec le message entré au clavier plus le pseudo entré également au clavier
+                    ChatMessage chat_message = new ChatMessage(Commande.POST, CommandeType.REQUETE, msg, pseudo);
+                    
+                    // Encodage string dans un buffer de bytes en ASCII
+                    //transformation des messages en Bytes et placer dans les différents buffer
+                    byte[] buffer = chat_message.GetBytes();
+                     
+                    // Envoie du message POST au serveur
+                    clientSocket.SendTo(buffer, 0, buffer.Length, SocketFlags.None, serverEP);
                 }
 
 
diff --git a/Chat/serveurUdp/serveurUdp/ServeurUdp.cs b/Chat/serveurUdp/serveurUdp/ServeurUdp.cs
index 4ec6cfb569a291b30d948c3b219690022030c450..72e564117709bc9144788f309277b75ed4265cb4 100644
--- a/Chat/serveurUdp/serveurUdp/ServeurUdp.cs
+++ b/Chat/serveurUdp/serveurUdp/ServeurUdp.cs
@@ -11,6 +11,49 @@ namespace ServeurUdp
 {
     class ServeurUdp
     {
+        static string messages = String.Empty;
+        static List<EndPoint> subscribers = new List<EndPoint>();
+
+        static void sendMsgs(Socket serverSocket, EndPoint clientEP)
+        {
+            // Pas de message sur le serveur on l'indique au client
+            if (messages == String.Empty)
+            {
+                byte[] buf = Encoding.ASCII.GetBytes("Il n'y a aucun message d'enregistré sur le serveur !");
+                serverSocket.SendTo(buf, 0, buf.Length, SocketFlags.None, clientEP);
+            }
+            // Envoi des messages au client
+            else
+            {
+                byte[] buf = System.Text.Encoding.ASCII.GetBytes(messages);
+                serverSocket.SendTo(buf, 0, buf.Length, SocketFlags.None, clientEP);
+            }
+            Console.WriteLine("Liste des messages demandé !");
+        }
+
+        static void updateSubscribers(Socket serverSocket)
+        {
+            foreach(EndPoint ep in subscribers)
+            {
+                sendMsgs(serverSocket, ep);
+            }
+        }
+
+        static bool isSubscriber(EndPoint ep)
+        {
+            bool res = false;
+
+            for(int i = 0; i < subscribers.Count && !res;i++)
+            {
+                if (subscribers.ElementAt(i).ToString() == ep.ToString())
+                {
+                    res = true;
+                }
+            }
+
+            return res;
+        }
+
         static void Main(string[] args)
         {
             try
@@ -28,18 +71,15 @@ namespace ServeurUdp
                 serverSocket.Bind(new IPEndPoint(IPAddress.Any, 17021));
 
                 bool continuer = true;
-                string messages = String.Empty;
-
+                
                 //************************************************************** Communications
                 while (continuer)
                 {
-                    Console.WriteLine("Attente d'une nouveau message...");
+                    Console.WriteLine("Attente d'un nouveau message...");
 
                     // Reception message client
                     EndPoint clientEP = new IPEndPoint(IPAddress.Any, 0);
                     byte[] buffer = new byte[ChatMessage.bufferSize];
-
-
                     serverSocket.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref clientEP);
 
                     // Message instancié à partir du buffer
@@ -52,31 +92,54 @@ namespace ServeurUdp
                         case Commande.POST:
                             messages += msg.pseudo + ':' + msg.data + '/';
                             Console.WriteLine(msg.ToString());
+                            updateSubscribers(serverSocket);
                         break;
+
                         // Si demande des messages du serveur
                         case Commande.GET:
-                            // Pas de message sur le serveur on l'indique au client
-                            if(messages == String.Empty)
+                            Console.WriteLine("Envoi des messages GET");
+                            sendMsgs(serverSocket, clientEP);
+                        break;
+
+                        // Si demande d'abonnement aux messages
+                        case Commande.SUBSCRIBE:
+                            Console.WriteLine("Demande d'abonnement...");
+                            if (!isSubscriber(clientEP))
                             {
-                                byte[] buf = System.Text.Encoding.ASCII.GetBytes("Il n'y a aucun message d'enregistré sur le serveur !");
-                                serverSocket.SendTo(buf, 0, buf.Length, SocketFlags.None, clientEP);
+                                Console.WriteLine("Un client s'est abonné");
+                                subscribers.Add(clientEP);
                             }
-                            // Envoi des messages au client
                             else
                             {
-                                byte[] buf = System.Text.Encoding.ASCII.GetBytes(messages);
-                                serverSocket.SendTo(buf, 0, buf.Length, SocketFlags.None, clientEP);
+                                Console.WriteLine("Le client est déjà abonné");
                             }
+                            updateSubscribers(serverSocket);
                         break;
+
+                        // Si demande de désabonnement
+                        case Commande.UNSUBSCRIBE:
+                            Console.WriteLine("Demande de désabonnement...");
+                            if (isSubscriber(clientEP))
+                            {
+                                Console.WriteLine("Un client s'est désabonné");
+                                subscribers.Remove(clientEP);
+                            }
+                            else
+                            {
+                                Console.WriteLine("Le client n'est pas abonné");
+                            }
+                        break;                        
                     }
 
                     
 
-                    //************************************************************** Conclusion
+                    
                 }
                 // Fermeture socket
                 Console.WriteLine("Fermeture Socket...");
                 serverSocket.Close();
+
+                //************************************************************** Conclusion
             }
 
             catch (SocketException E)