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:
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:
Citation:
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;)