Conseils

Écrire des applications compatibles réseau avec Delphi

Écrire des applications compatibles réseau avec Delphi

Parmi tous les composants fournis par Delphi pour prendre en charge les applications qui échangent des données sur un réseau (Internet, intranet et local), deux des plus courants sont:TServerSocket et TClientSocket, tous deux conçus pour prendre en charge les fonctions de lecture et d’écriture sur une connexion TCP / IP.

Composants de socket Winsock et Delphi

Windows Sockets (Winsock) fournit une interface ouverte pour la programmation réseau sous le système d'exploitation Windows. Il offre un ensemble de fonctions, structures de données et paramètres connexes nécessaires pour accéder aux services réseau de toutes les piles de protocoles. Winsock agit comme un lien entre les applications réseau et les piles de protocoles sous-jacentes.

Les composants de socket Delphi (les wrappers pour Winsock) simplifient la création d'applications qui communiquent avec d'autres systèmes à l'aide de TCP / IP et de protocoles associés. Avec les sockets, vous pouvez lire et écrire des connexions sur d'autres machines sans vous soucier des détails du logiciel de réseau sous-jacent.

La palette Internet de la barre d’outils des composants Delphi héberge le TServerSocket et TClientSocket composants ainsi que TcpClient, TcpServer,et TUdpSocket.

Pour démarrer une connexion de socket à l'aide d'un composant de socket, vous devez spécifier un hôte et un port. En général, hôte spécifie un alias pour l'adresse IP du système serveur; Port spécifie le numéro d'identification qui identifie la connexion de socket serveur.

Un simple programme à sens unique pour envoyer du texte

Pour construire un exemple simple à l'aide des composants de socket fournis par Delphi, créez deux formulaires, l'un pour le serveur et l'autre pour l'ordinateur client. L'idée est de permettre aux clients d'envoyer des données textuelles au serveur.

Pour commencer, ouvrez deux fois Delphi, en créant un projet pour l’application serveur et un autre pour le client.

Du côté serveur:

Sur un formulaire, insérez un composant TServerSocket et un composant TMemo. Dans l'événement OnCreate du formulaire, ajoutez le code suivant:

procédure TForm1.FormCreate (Sender: TObject);
commencer
ServerSocket1.Port: = 23;
ServerSocket1.Active: = True;
fin;

L'événement OnClose doit contenir:

procédure TForm1.FormClose
(Expéditeur: TObject; var Action: TCloseAction);
commencer
ServerSocket1.Active: = false;
fin;

Côté client:

Pour l'application cliente, ajoutez un composant TClientSocket, TEdit et TButton à une fiche. Insérez le code suivant pour le client:

procédure TForm1.FormCreate (Sender: TObject);
commencer
ClientSocket1.Port: = 23;
// adresse TCP / IP locale du serveur
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
fin;
procédure TForm1.FormClose (Sender: TObject; var Action: TCloseAction);
commencer
ClientSocket1.Active: = false;
fin;
procédure TForm1.Button1Click (Sender: TObject);
début ClientSocket1.Active puis
ClientSocket1.Socket.SendText (Edit1.Text);
fin;

Le code se décrit assez bien: lorsqu'un client clique sur un bouton, le texte spécifié à l'intérieur du composant Edit1 sera envoyé au serveur avec le port et l'adresse hôte spécifiés.

Retour sur le serveur:

La touche finale de cet exemple consiste à fournir au serveur une fonction permettant de "voir" les données envoyées par le client. L'événement qui nous intéresse est OnClientRead. Il se produit lorsque le socket du serveur doit lire les informations d'un socket client.

procédure TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
commencer
Memo1.Lines.Add (Socket.ReceiveText);
fin;

Lorsque plusieurs clients envoient des données au serveur, vous avez besoin d'un peu plus de code:

procédure TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
var
i: entier;
sRec: chaîne;
commencer i: = 0 à ServerSocket1.Socket.ActiveConnections-1 dobeginwith ServerSocket1.Socket.Connectionsi dobegin
sRec: = ReceiveText;
si sRecr "alors commencer
Memo1.Lines.Add (RemoteAddress + 'envoie:');
Memo1.Lines.Add (sRecr);
fin;
fin;
fin;
fin;

Lorsque le serveur lit des informations à partir d'un socket client, il ajoute ce texte au composant Mémo. le texte et l'adresse client RemoteAddress sont ajoutés afin que vous sachiez quel client a envoyé les informations. Dans les implémentations plus sophistiquées, les alias des adresses IP connues peuvent servir de substituts.

Pour un projet plus complexe utilisant ces composants, explorez les Delphi> Démos> Internet> Chat projet. C'est une simple application de discussion en réseau qui utilise un formulaire (projet) pour le serveur et le client.