TCPlistener, envoi d'un message à tous les utilisateurs connectés [Résolu]

t0fx 22 Messages postés mercredi 24 octobre 2007Date d'inscription 1 décembre 2009 Dernière intervention - 30 nov. 2009 à 22:03 - Dernière réponse : t0fx 22 Messages postés mercredi 24 octobre 2007Date d'inscription 1 décembre 2009 Dernière intervention
- 1 déc. 2009 à 15:02
Bonjour à tous ! J'essaye de créer une application de Chat multi postes, j'en suis au tout début et j'aurai besoin d'un peu d'aide pour un bout de code !
J'ai plusieurs ordinateurs qui se connectent à moi et j'aimerai envoyer un message général à tous les connectés. Voilà le code source de l'application :

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace LanChat
{
    public partial class Form1 : Form
    {
        public int Computers = 0;
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }

        public void button1_Click(object sender, EventArgs e)
        {

            if (button1.Text == "Listen")
            {
                TcpListener = new TcpListener(IPAddress.Any, Convert.ToInt32(textPort.Text));
                ListenThread = new Thread(ListenForClients);
                ListenThread.Start();
                button1.Text = "Stop";

            }
            else
            {
                button1.Text = "Listen";
                TcpListener.Stop();
                ListenThread.Abort();
                ListenThread.Interrupt();
                textOut.Clear();
             }
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            notifyIcon1.BalloonTipTitle = "Welcome!";
            notifyIcon1.BalloonTipText = "LanChat Loaded!";
            notifyIcon1.ShowBalloonTip(2000);
        }

        public TcpListener TcpListener;
        public Thread ListenThread;


        public void ListenForClients()
        {
            TcpListener.Start();

            while (true)
            {
                //Attente de connexions
                var client = TcpListener.AcceptTcpClient();

                //création d'un thread pour gérer les communications
                //avec chaque client
                var clientThread = new Thread(HandleClientComm);
                clientThread.Start(client);
            }
        }

        public void HandleClientComm(object client)
        {
            var tcpClient = (TcpClient)client;
            var clientStream = tcpClient.GetStream();
            Users++;
            lblusers.Text = "( Status : " + Computers + " )";
            var message = new byte[4096];

            while (true)
            {
                int bytesRead;
                ASCIIEncoding encoder;
                try
                {
                    encoder = new ASCIIEncoding();
                    byte[] buffer = encoder.GetBytes("Ping");
                    clientStream.Write(buffer, 0, buffer.Length);
                    clientStream.Flush(); 
                    //attente de reception du pong
                    bytesRead = clientStream.Read(message, 0, 4096);
                    //Reception du message : envoi de la réponse auto
                    byte[] buffer1 = encoder.GetBytes("pause");
                    clientStream.Write(buffer1, 0, buffer1.Length);
                    clientStream.Flush(); 
                }
                catch
                {
                    //socket error
                    //textOut.AppendText(client + " disconnected \r\n");
                    Users--;
                    lblusers.Text = "( Status : " + Computers + " )";
                    break;
                }

                if (bytesRead == 0)
                {
                    //client déconnecté
                    //textOut.AppendText(client + " disconnected \r\n");
                    Users--;
                    lblusers.Text = "( Status : " + Computers + " )";
                    break;
                }

                //reception message ok, connexion réussie
                encoder = new ASCIIEncoding();
                textOut.AppendText(encoder.GetString(message, 0, bytesRead) + "Connected \r\n");
            }

            tcpClient.Close();
        }

        public void SendMessageToAll(string message)
        {
            foreach (?? in ??)
            {
                byte[] buffer1 = encoder.GetBytes(message);
                clientStream.Write(buffer1, 0, buffer1.Length);
                clientStream.Flush();
            }
        }

    }

}



La ou je bloque c'est :

        public void SendMessageToAll(string message)
        {
            foreach (?? in ??)
            {
                byte[] buffer1 = encoder.GetBytes(message);
                clientStream.Write(buffer1, 0, buffer1.Length);
                clientStream.Flush();
            }
        }


Si quelqu'un à un début de réponse ça serait sympa !
Kenavo !
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 1 déc. 2009 à 10:13
3
Merci
Salut

Il faudrait que tu sauvegardes la liste de tes TcpClients (que tu remplis juste avant de démarrer ton nouveau thread par exemple.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de krimog
t0fx 22 Messages postés mercredi 24 octobre 2007Date d'inscription 1 décembre 2009 Dernière intervention - 1 déc. 2009 à 15:02
0
Merci
Merci bien , j'avais pas pensé à ça !
Commenter la réponse de t0fx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.