Programmation réseau avec Delphi 8 pour .NET

| Thomas Lebrun | Bruno Guérangé |

Cet article vous expliquera comment utiliser le Delphi pour .NET pour vous initier à la programmation réseau.
C'est une adaptation de l'article de Thomas Lebrun : Programmation réseau en C# ?

- Titre : Programmation réseau avec Delphi 8 pour .NET

- Auteurs : Thomas Lebrun, Bruno Guérangé

- Parution : 27 juillet 2004

- Mise à jour : 27 juillet 2004

- Licence : Copyright ® 2004 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Avant-propos

- I. Introduction

- I-A. Les Sockets

- I-B. Le Framework .NET

- II. La classe Socket

- II-A. Création d'une socket

- II-B. Connexion/Ecoute

- II-C. Transmission des données

- II-C-1. Envoi de données

- II-C-2. Réception de données

- II-D. Fermeture de la socket

- III. Les classes réseau du Framework .NET

- III-A. La classe TcpClient

- III-B. La classe UdpClient

- III-C. La classe TcpListener

- Conclusion

Avant-propos

Réaliser une application client serveur devient chose commune et souvent recherchée.
La programmation réseau qu'elle implique est bien souvent compliquée, dans les autres langages, pour des développeurs débutants.
Heureusement, le Framework .Net de Microsoft permet une mise en œuvre simple et efficace.

I - Introduction

I-A - Les Sockets

La programmation réseau repose sur les sockets.
Les sockets sont un mode de communication standard sur réseau, mis au point à Berkeley, qui permettent à une application de dialoguer avec un protocole. Cela peut être fait sur une même machine, ou bien sur une machine distante, au travers d'un réseau.
Il existe deux modes de communications pour les sockets :

- le mode connecté, qui utilise le protocole TCP ;

- le mode déconnecté, qui repose sur le protocole UDP.

I-B - Le Framework .NET

Le Framework .Net dispose de nombreuses classes destinées à faciliter la programmation réseau. L'ensemble de ces classes est intégré dans les espaces de nom System.Net et System.Net.Sockets.
Pensez à ajouter ces espaces de nom dans le Uses de votre unité pour compiler le code qui suit.
Ces classes constituent le minimum à utiliser pour le développement d'une application réseau.

II - La classe Socket

La classe Socket du Framework .Net est la base de la programmation réseau.

II-A - Création d'une socket

Pour créer une socket, vous devez l'instancier, au moyen de son constructeur (les paramètres du constructeur sont des énumérations, dépendantes les unes des autres) :

Création d'une socket

Socket.Create (famille:AdressFamily ; letype:SocketType; protocole:ProtocolType );

- AdressFamily est le type de l'adresse utilisée : AppleTalk, InterNetwork (IP), InterNetworkV6 (IPv6), etc.

- SocketType est le type de socket utilisée : Raw, Stream, etc.

- ProtocolType est le protocole utilisé : Ip, Tcp, Udp, Ipx, etc.

Exemple de création d'une socket :

Exemple de création d'une socket

Var LeSocket:Socket;
...
LeSocket:=Socket.Create(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

II-B - Connexion/Ecoute

La connexion à une socket se fait via la méthode Connect de l'objet Socket.
Cette méthode prend en paramètre un IpEndPoint, qui permet de spécifier sur quelle IP et sur quel port notre socket doit se connecter.

Exemple :

Connexion

LeSocket.Connect(IpEndPoint.Create(Dns.Resolve('www.developpez.com').AddressList[0],80));

Il est également possible de créer une socket d'écoute, au moyen de la méthode Listen.
Celle-ci prend en paramètre le numéro du port sur lequel la socket doit écouter.

II-C - Transmission des données

Nous allons voir ici comment envoyer et recevoir des données.

II-C-1 - Envoi de données

Pour envoyer des données, vous devez utiliser la méthode Send, qui comprend plusieurs surcharges :

Envoi de données

Socket.Send(LeMessage:Array Of Byte;offset:Integer;size:Integer;Flags:SocketFlags);

- Message est le message à envoyer, sous forme de tableau de bytes.

- Indice de départ d'envoi est l'indice, dans le tableau, à partir duquel lire.

- Longueur à envoyer est le nombre d'octets à envoyer.

- SocketFlags est une énumération permettant de contrôler l'envoi des données

Exemple :

Envoyer des données par les sockets

Var Mess:Array Of Byte;
begin
Mess := Encoding.ASCII.GetBytes('Toto');
LeSocket.Send(Mess,0,Length(Mess),SocketFlags.None);
end;

REM : Encoding est défini dans l'espace de noms System.Text.

II-C-2 - Réception de données

La réception de données, quant à elle, se fait au moyen simple de la méthode Receive.
Tout comme la méthode Send, elle dispose de plusieurs surcharges :

Réception de données

Socket.Receive (MessageRecu:Array Of Byte [;offset:Integer] [;size:Integer] [;Flags:SocketFlags]);

Les arguments de la méthode Receive sont identiques à ceux de la méthode Send.

Vous pouvez à tout moment contrôler l'état de la socket, au moyen de la propriété Connected.

II-D - Fermeture de la socket

Pour fermer une socket, vous devez, au préalable, terminer les opérations d'envois et de réceptions sur la socket.
Ensuite, appeler la méthode ShutDown, prenant en paramètre un SocketShutDown.

III - Les classes réseau du Framework .NET

Le Framework .Net contient des classes, toutes dérivées de la classe Socket, qui ont été créées dans le but de simplifier les étapes.

III-A - La classe TcpClient

La classe TcpClient permet d'accéder aux services du protocole TCP.
Il est possible, via cette classe, de se connecter à une socket en écoute, et d'envoyer et recevoir des données de celui-ci.

Pour utiliser cette classe, vous devez :

- créer la connexion, au moyen d'un des constructeurs de la classe TcpClient ;

- transmettre les données, au moyen d'un objet de type NetworkStream ;

- fermer la connexion, au moyen de la méthode Close de la classe TcpClient.

III-B - La classe UdpClient

La classe UdpClient permet d'accéder aux services du protocole UDP.
Cette classe permet d'envoyer et de recevoir des données.

Utilisation de la classe :

- instanciation de la classe, au moyen de l'un des constructeurs disponibles ;

- spécification de la destination des messages à envoyer, au moyen de la méthode Connect ;

- envoi des données, via la méthode Send ;

- réception des données, par la méthode Receive ;

- fermeture de la connexion, via la méthode Close de l'objet UdpClient.

III-C - La classe TcpListener

Cette classe est utilisée pour écouter sur des ports TCP.

Utilisation de la classe :

- création de l'écoute, au moyen d'un des constructeurs de la classe TcpListener ;

- démarrage de l'écoute : Cela se fait par le biais de la méthode Start ;

- acceptation des clients : soit en utilisant la méthode AcceptSocket, soit en utilisant la méthode AcceptTcpClient ;

- fermeture de la connexion : au moyen de la méthode Close.

Cette liste vous montre les principales méthodes de ces classes : bien sûr, il en existe d'autres, ainsi que des propriétés utiles, que je vous laisse découvrir.

Conclusion

Pour conclure, nous pouvons affirmer que réaliser un logiciel client serveur ne s'avère pas aussi difficile qu'il peut paraître à première vue : en effet, le Framework .Net fournit toutes les classes dont nous avons besoin.
Il ne vous reste plus maintenant qu'à appliquer tout ce que vous venez de voir.