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) :
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 :
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 :
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 :
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 :
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 :
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.