Écoute de port côté serveur

Mettez en place le programme serveur, liez une adresse IP et un port avec TcpListener, lancez l’écoute sur le port et attendez les connexions TCP provenant des clients. Deux implémentations sont proposées : application console et application fenêtre WinForms.

Présentation des API principales

  1. IPAddress : représente une adresse IP locale. IPAddress.Parse("127.0.0.1") convertit une chaîne de caractères d’adresse IP en objet.
    • 127.0.0.1 : adresse de boucle locale, accessible uniquement depuis la machine hôte. Pour autoriser des connexions depuis d’autres appareils du réseau local, utilisez une IP du réseau interne comme 192.168.x.x ;
    • IPAddress.Any : écoute sur toutes les adresses IP des cartes réseau de la machine.
  2. TcpListener : classe d’écoute du serveur TCP. Paramètres du constructeur : Adresse IP + Numéro de port
  3. listener.Start() : démarrer l’écoute. Une fois appelée, le serveur attend les connexions clientes.

Version console

using System;
using System.Net;
using System.Net.Sockets;

namespace TalkService
{
    class Program
    {
        static void Main(string[] args)
        {
            // Créer l'objet IP
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            // Créer un écouteur TCP sur le port 9500
            TcpListener listener = new TcpListener(ip, 9500);
            // Lancer l'écoute
            listener.Start();
            Console.WriteLine("Écoute démarrée… Appuyez sur E pour quitter");

            ConsoleKeyInfo info;
            do
            {
                info = Console.ReadKey();
            } while (info.Key != ConsoleKey.E);

            listener.Stop(); // Arrêter l'écoute à la sortie
        }
    }
}Langage du code : JavaScript (javascript)

Ce code lance seulement l’écoute, la méthode AcceptTcpClient n’est pas appelée pour attendre les clients, il maintient simplement le processus en vie.

Version WinForms

Composants de l’interface : (vous pouvez ajouter des contrôles sur le formulaire WinForm pour configurer l’IP, le port, le texte à envoyer, etc.)

  • textBoxIP : champ de saisie IP (valeur par défaut 127.0.0.1)
  • textBoxPort : champ de saisie du port (valeur par défaut 9500)
  • buttonStart : bouton Démarrer
  • textBoxInfo : zone d’affichage des messages d’information
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)
        {
            // Analyser l'IP et le port
            ip = IPAddress.Parse(this.textBoxIP.Text);
            int port = Convert.ToInt32(this.textBoxPort.Text);
            listener = new TcpListener(ip, port);

            // Démarrer l'écoute
            listener.Start();

            // Afficher le journal
            string log = $"Serveur démarré {DateTime.Now.ToShortTimeString()}\r\n";
            this.textBoxInfo.Text = log + this.textBoxInfo.Text;
        }
    }
}Langage du code : PHP (php)

Points à traiter

  1. Problème de blocage de l’interface
    listener.AcceptTcpClient() est une méthode bloquante. Un appel direct depuis le thread principal de l’interface lors du clic sur le bouton gèle la fenêtre. Il faut créer un nouveau thread ou utiliser async/await pour attendre les connexions de manière asynchrone.
  2. Port déjà utilisé
    Si le port 9500 est occupé par une autre application, l’instanciation de new TcpListener() déclenche une exception. Ajoutez un bloc try‑catch pendant le développement pour la gérer.
  3. Connexion entre hôtes différents
    Se lier à 127.0.0.1 ne permet que des tests locaux. Pour accepter des connexions depuis le réseau local, indiquez l’adresse IP locale de la machine et autorisez le port 9500 dans le pare‑feu.

Écoute de port côté serveur

Previous:
Next:

Laisser un commentaire

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