diff --git a/Chat/clientUdp/clientUdp/ChatMessage.cs b/Chat/clientUdp/clientUdp/ChatMessage.cs index 0d37a840a04627065fd424ca6bf59d74ad9cadbd..5632ab3106abba45df9f24b2f0e64ba763d66400 100644 --- a/Chat/clientUdp/clientUdp/ChatMessage.cs +++ b/Chat/clientUdp/clientUdp/ChatMessage.cs @@ -18,7 +18,7 @@ namespace ClientUdp class ChatMessage { public const int bufferSize = 1500; - + public const int headerSize = 35; public Commande commande; // commande public CommandeType commandeType; // type (Requête/Réponse) public int dataSize; // taille de la donnée diff --git a/Chat/clientUdp/clientUdp/ClientUdp.cs b/Chat/clientUdp/clientUdp/ClientUdp.cs index a3940c28d581e4407dddbcae3c450cd523e3ca42..b00c3376cae210444399e80b98b579164c2eaba2 100644 --- a/Chat/clientUdp/clientUdp/ClientUdp.cs +++ b/Chat/clientUdp/clientUdp/ClientUdp.cs @@ -5,11 +5,13 @@ using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; namespace ClientUdp { class ClientUdp { + const int MsgsBufferSize = 1000000; static string getPseudo() { String pseudo = String.Empty; @@ -60,9 +62,9 @@ namespace ClientUdp try { //************************************************************** Initialisation - string serverIP = "130.79.81.200"; // A changer + string serverIP = "130.79.81.68"; // A changer int serverPort = 17021; // A changer - + bool continuer = true; // Création de la socket d'écoute UDP Socket clientSocket = new Socket( @@ -74,35 +76,58 @@ 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 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, "", ""); + + + //************************************************************** 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(); + 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[] listMessages = messages.Split('/'); + //affichage des messages + foreach(string mess in listMessages) + { + Console.WriteLine(mess); + } + + + /*Console.WriteLine("Nouveau message envoye vers " + + serverEP + + " (" + nBytes + " octets)" + + ": \"" + msg + "\"");*/ - // 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 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); - - //************************************************************** Communications - - // Encodage du string dans un buffer de bytes en ASCII - //transformation du message en Bytes et placer dans le buffer - byte [] buffer = chat_message.GetBytes(); - Console.WriteLine("Taille buffer : " + buffer.Length); - - // Envoie du message au serveur - int nBytes = clientSocket.SendTo(buffer, 0, buffer.Length, SocketFlags.None, serverEP); - - Console.WriteLine("Nouveau message envoye vers " - + serverEP - + " (" + nBytes + " octets)" - + ": \"" + msg + "\""); - + } //************************************************************** Conclusion // Fermeture socket