IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Windows Discussion :

Console chat en C# qui foire un peu


Sujet :

Développement Windows

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Console chat en C# qui foire un peu
    Bonjour,

    voila 2 jours que j'essaye de programmer un petit chat juste avec les consoles en C# en utilisant les sockets.
    J'ai plusieurs clients et un serveur, le tout sur un même PC en local.

    Voila tout mes problèmes:

    • J'arrive à envoyer un message avec le client mais un seul à la fois, c'est-à-dire que, si j'allume deux clients une fois le message envoyé par le premier il coupe la connexion avec et s'occupe du deuxième. Comme une file d'attente. Sa marche aussi avec 5 clients etc...

    • Je suis obligé de donner une taille à ma variable byte, du coup j'ai des gros espaces entre chaque message ou bien même le contraire puisque je l'ai limiter a 100 pour cette exemple. J'aimerais juste adapter la taille.


    SERVEUR.CS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                #region parametreSocket
                IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress ipAddress = ipHostInfo.AddressList[0];
                IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8888);
                Console.WriteLine("[Console] Le serveur a démarrer");
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(localEndPoint);
                listener.Listen(10);
                #endregion parametreSocket
     
                byte[] bytes = new byte[100];
     
                while (true) {
                    Socket handler = listener.Accept();
                    try
                    {
                        Console.WriteLine(handler.RemoteEndPoint + " Vient de se connecter.");
                    }
                    catch (SocketException e)
                    {
                        Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode);
                    }
     
                    try
                    {
                        handler.Receive(bytes);
                        Console.WriteLine(handler.RemoteEndPoint + " : " + Encoding.UTF8.GetString(bytes));
                    }
                    catch (SocketException e)
                    {
                        Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode);
                    }
                }
     
            }
        }
    }
    CLIENT.CS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                #region parametreSocket
                IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.1.12"), 8888);
                Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                #endregion parametreSocket
     
     
     
                // Pour le moment il n'y a pas de connexion
                int Cbon = 0;
     
     
                // Tant que c'est vrai
                while (true)
                {
     
                    // Si on est connecter
                    if (Cbon == 1)
                    {
                        // On essaye d'envoier un message
                        try
                        {
                            string msg = Console.ReadLine();
                            // On converti le message a envoier en Byte
                            byte[] msgByte = Encoding.UTF8.GetBytes(msg);
                            int i = server.Send(msgByte);
                            Console.WriteLine("Sent {0} bytes.", i);
                        }
                        catch (SocketException e)
                        {
                            Console.ForegroundColor = ConsoleColor.DarkRed;
                            Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode);
                            Console.ResetColor();
                        }
                    }
                    else// Si pas de connexion
                    {
                        // On essaye de se connecter au serveur
                        try
                        {
                            server.Connect(ip);
                            Console.WriteLine("Connexion au serveur réussi");
                            Cbon = 1;
                        }
                        catch (SocketException e)
                        {
                            Console.ForegroundColor = ConsoleColor.DarkRed;
                            Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode);
                            Console.ResetColor();
                            Cbon = 0;
                        }
                    }
                }
     
            }
        }
    }
    Voilà les codes sources pour que vous puissiez tester si vous voulez.

    Merci d'avance.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    toujours dans le souci ?
    Plus je connais de langages, plus j'aime le C.

Discussions similaires

  1. [DELPHI][ORACLE] Requête qui renvoie un peu ce qu'elle veut
    Par LAPLACE dans le forum Bases de données
    Réponses: 27
    Dernier message: 25/09/2007, 13h42
  2. [Réseau] read socket dans while qui foire
    Par let_me_in dans le forum C++
    Réponses: 7
    Dernier message: 21/08/2007, 12h36
  3. Read qui foire
    Par Ziman dans le forum C
    Réponses: 4
    Dernier message: 11/12/2006, 14h47
  4. Evenement dbl click qui foire
    Par louroulou dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 17h34
  5. poste de travail qui foire
    Par flo456 dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 03/04/2006, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo