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; using System.IO; 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[256]; 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.langochat.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(0); } } private void ThreadAffichage() { try { Invoke(TextBoxDelegate, "< " + Encoding.ASCII.GetString(reception)); } catch { Thread.CurrentThread.Abort(); } Thread.Sleep(0); } private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { byte[] envoi = Encoding.ASCII.GetBytes(textBox1.Text); int i = socket.Send(envoi, 0, envoi.Length, SocketFlags.None); ChatBox.Text += "> " + textBox1.Text + " (" + i + " octets envoyés)." + "\r\n"; textBox1.Text = ""; } } } }