TcpClient

Dans cette leçon, nous allons créer un client qui se connectera au serveur.

Associons le code serveur vu au chapitre précédent (TcpListener) et le client de cette section (TcpClient) pour réaliser pas à pas un outil de discussion TCP.

Distinction des concepts

  1. Serveur : TcpListener
    Il se lie à une IP fixe et un port fixe (9500). Il écoute en arrière‑plan et accepte plusieurs connexions clientes simultanément. C’est comme un commerçant qui attend des clients.
  2. Client : TcpClient
    Aucune liaison de port manuelle n’est requise. Le système d’exploitation attribue automatiquement un port temporaire aléatoire pour initier la connexion vers le port serveur 9500.

Les ports des deux extrémités ne sont pas identiques
Port aléatoire du client — port fixe du serveur : 9500

Client en mode console

using System;
using System.Net.Sockets;

namespace TalkClient
{
    class Program
    {
        static void Main(string[] args)
        {
            // Création de l’objet client TCP
            TcpClient tcpClient = new TcpClient();

            // Connexion au serveur local 127.0.0.1:9500
            // Pour un autre ordinateur, utilisez son IP. Serveur et client ne sont pas obligatoirement sur la même machine.
            tcpClient.Connect("127.0.0.1", 9500);

            // LocalEndPoint : adresse‑port du client local
            // RemoteEndPoint : adresse‑port du serveur distant
            Console.WriteLine("Connexion établie, port local {0}, port serveur {1}",
                tcpClient.Client.LocalEndPoint,
                tcpClient.Client.RemoteEndPoint);

            Console.ReadLine();
            tcpClient.Close();
        }
    }
}Langage du code : JavaScript (javascript)

Code client WinForms

Contrôles de l’interface :

  • textBoxIP : IP du serveur
  • textBoxPort : port du serveur
  • buttonStart : bouton « Connexion »
  • textBoxInfo : zone d’affichage des messages
  • textBoxMsg : champ de saisie des messages à envoyer
  • buttonSend : bouton d’envoi
using System;
using System.Net.Sockets;
using System.Windows.Forms;

namespace SocketChatClient
{
    public partial class Form1 : Form
    {
        TcpClient tcpClient;

        public Form1()
        {
            InitializeComponent();
        }

        // Événement clic du bouton connexion
        private void buttonStart_Click(object sender, EventArgs e)
        {
            tcpClient = new TcpClient();
            try
            {
                string ip = textBoxIP.Text;
                int port = Convert.ToInt32(textBoxPort.Text);
                tcpClient.Connect(ip, port);
                textBoxInfo.AppendText($"Connexion réussie ! Point d’extrémité local : {tcpClient.Client.LocalEndPoint}\r\n");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Échec de la connexion‑" + ex.Message);
            }
        }
    }
}Langage du code : PHP (php)

Fonctionnement serveur + client

  1. Lancez d’abord le programme serveur, cliquez sur démarrer, appelez TcpListener.Start() pour écouter sur le port 9500
  2. Ensuite lancez le programme client, cliquez sur connexion ; TcpClient.Connect() réalise la poignée de main à trois voies TCP
  3. Une fois connectés, les deux programmes échangent des messages via NetworkStream (chapitre suivant)

Remarques importantes

  1. Causes courantes d’échec de connexion
  • Mauvais ordre de lancement : serveur non démarré au préalable
  • IP ou port saisis incorrects
  • Blocage par le pare‑feu ; évitez 127.0.0.1 pour déboguer sur plusieurs ordinateurs, utilisez plutôt l’IP du réseau local
  1. Points sur les ports
  • Le serveur garde le port 9500 fixe et accepte plusieurs clients en même temps
  • Le port du client est attribué aléatoirement par le système d’exploitation, il change à chaque exécution, pas besoin de le définir manuellement
  1. Avertissement sur le blocage
    Appeler directement .Connect() dans une application WinForms bloque le thread de l’interface. Dans un projet de production préférez la méthode asynchrone ConnectAsync pour éviter que la fenêtre ne se fige.

Rappel : serveur WinForms (chapitre précédent)

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

namespace SocketChatServer
{
    public partial class Form1 : Form
    {
        IPAddress ip;
        TcpListener listener;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            ip = IPAddress.Parse(textBoxIP.Text);
            int port = Convert.ToInt32(textBoxPort.Text);
            listener = new TcpListener(ip, port);
            listener.Start();

            textBoxInfo.Text = $"Serveur démarré {DateTime.Now.ToShortTimeString()}\r\n" + textBoxInfo.Text;
        }
    }
}Langage du code : C# (cs)

Client

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *