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

Windows Forms Discussion :

Client IRC [Sockets/Threads]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de SpecialCharacter
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Par défaut Client IRC [Sockets/Threads]
    Bonsoir, je me suis mis à la programmation d'un petit client IRC
    Il ressemble en beaucoup de points à tous ceux des débutants je n'en doute pas.
    Il est assez délicat de gérer ces connexions avec les \r\n, en tout cas pour ma part il semble que le problème se situe ici, en effet, je ne reçois pas tous les messages que je devrais (Je fais le parallèle avec XChat en journal brute pour voir ce qui diffère...)

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
     
    namespace Client_IRC
    {
        public partial class Dialogue : Form
        {
            // Création du socket de connexion au server.
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // Délégué pour la gestion de la ChatBox par le ThreadAffichage.
            private delegate void TextBoxDelegateHandler(string str);
            private TextBoxDelegateHandler TextBoxDelegate;
            byte[] reception = new byte[1024];
     
            public Dialogue()
            {
                InitializeComponent();
                TextBoxDelegate = new TextBoxDelegateHandler(UpdateData);
                Thread t_reception = new Thread(new ThreadStart(ThreadReception));
                Thread t_affichage = new Thread(new ThreadStart(ThreadAffichage));
     
                socket.Connect(new IPEndPoint(Dns.GetHostAddresses("irc.epiknet.net")[0], 6667));
     
                t_reception.Start();
                t_affichage.Start();
     
     
                byte[] envoi = Encoding.Default.GetBytes("NICK Tastee\r\nUSER guest tolmoon tolsun :Ronnie Reagan\r\n");
     
                try
                {
                    int i = socket.Send(envoi, 0, envoi.Length, SocketFlags.None);
                    ChatBox.Text = "Envoyé: " + i + " octets.\r\n";
                }
                catch (SocketException Ex)
                {
                    MessageBox.Show("Erreur: " + Ex.Message);
                }
            }
            private void UpdateData(string str)
            {
                ChatBox.Text += str;
            }
     
            private void ThreadReception()
            {
                while (true)
                {
                    try
                    {
                        socket.Receive(reception, 0, reception.Length, SocketFlags.None);
                    }
                    catch (SocketException Ex)
                    {
                        MessageBox.Show("Connexion interrompue: " + Ex.Message);
                        Thread.CurrentThread.Abort();
                    }
                    Thread.Sleep(100);
                }
            }
            private void ThreadAffichage()
            {
                try
                {
                    Invoke(TextBoxDelegate, Encoding.ASCII.GetString(reception));
                }
                catch
                {
                    Thread.CurrentThread.Abort();
                }
                Thread.Sleep(100);
            }
     
            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    byte[] envoi = Encoding.Default.GetBytes(textBox1.Text + "\r\n");
                    socket.Send(envoi, 0, envoi.Length, SocketFlags.None);
                    textBox1.Text = "";
                }
            }
        }
    }
    Je n'obtiens que ce message:
    Envoyé: 55 octets.
    :toulouse2.fr.epiknet.org NOTICE AUTH :*** Looking up your hostname...
    :toulouse2.fr.epiknet.org NOTICE AUTH :*** Checking ident...
    Merci de votre aide, et surtout bonne nuit,

    Cordialement

  2. #2
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Bonjour,

    Dans un premier temps,
    ThreadAffichage ne sert à rien, il faut l'enlever.
    Mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke(TextBoxDelegate, Encoding.ASCII.GetString(reception));
    après la réception de données dans ThreadReception

    Est ce que ça change déjà quelque chose?

Discussions similaires

  1. Un client irc avec socket et fork
    Par cybersplash dans le forum POSIX
    Réponses: 6
    Dernier message: 12/04/2007, 20h22
  2. Réponses: 7
    Dernier message: 19/10/2004, 19h09
  3. Chat (sockets + thread)
    Par raf_gug dans le forum MFC
    Réponses: 4
    Dernier message: 14/01/2004, 17h00
  4. Réponses: 2
    Dernier message: 31/08/2002, 21h37

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