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 = "";
            }
        }
    }
} | 
Partager