Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Delphi 10.3
  3. Communication interprocessus (IPC)
Extrait - Delphi 10.3 Programmation orientée objet en environnement Windows
Extraits du livre
Delphi 10.3 Programmation orientée objet en environnement Windows
9 avis
Revenir à la page d'achat du livre

Communication interprocessus (IPC)

Introduction

Dans le cadre d’applications simples, une seule application accessible par une ou plusieurs Forms peut porter toute l’intelligence. Cependant, il existe des solutions logicielles comportant plusieurs modules applicatifs qui communiquent entre eux. Il s’agit parfois de mutualiser ou d’isoler certains traitements comme des calculs ou des appels à des webservices tiers.

Le mode de dialogue le plus simple est une communication 1 pour 1 directe. Dans ce mode de dialogue, on rencontre plus fréquemment une communication par fichier d’échanges avec une arborescence de répertoires pour déterminer ce qui est entrant et ce qui est sortant, une communication par message Windows ou par communication TCP/IP. Cette liste n’est pas exhaustive et seule l’imagination du développeur limite les modes de communication possibles. 

Nous détaillerons la communication par message Windows et par message TCP/IP dans ce chapitre.

Communication via message Windows

La communication entre deux applications distinctes par message Windows est la méthode qui est au plus proche du système d’exploitation. On ajoute un message à la pile générale de messages et ensuite le gestionnaire de message propre à l’application cible traite ce message.

La signature de l’API est comme suit :

function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; 
lParam: LPARAM): LRESULT; 

Détaillons les paramètres :

  • hWnd : handle de la fenêtre destinatrice.

  • Msg : type de message qui sera envoyé. Dans notre cas, cela sera le WM_COPYDATA. C’est le type de message qui est utilisé pour échanger des données entre deux applications.

  • wParam : paramètre additionnel du message.

  • lParam : paramètre additionnel du message.

Cette signature est assez permissive et permet de gérer un nombre important de cas.

On remarque que le premier paramètre est le handle de la fenêtre à destination du message. Pour un utilisateur de l’application sans droit administrateur, cela limite les échanges au niveau de la même session utilisateur. De plus, on ne peut plus communiquer avec un service via cette méthode depuis Windows Vista car la session 0 dans laquelle fonctionnent les services est complètement isolée des autres sessions interactives.

En général, on échange du texte par cette méthode. Le texte peut être des messages à afficher ou à loguer. Il peut également s’agir de contenu structuré en format XML ou JSON. À l’aide des fonctions de lecture de XML ou de JSON vues précédemment, on pourra donc extraire les informations émises par l’émetteur du message et les exploiter.

Nous allons voir dans cette section la création de deux applications mettant en œuvre cette API. Créons une application Form standard dont le nom sera Receiver. Il comportera uniquement un TLabel et un TRichEdit pour afficher le message reçu.

Créons un nouveau projet Windows VCL Application par Files - New - Window VCL Application. Ci-dessous se trouve le rendu graphique final désiré.

Le nom de la classe sera TFormReceiver et on paramétrera le Caption de la fenêtre pour afficher...

Communication via TCP/IP

Le mode de communication étudié précédemment par message Windows possède ses limites. Il est restreint à la portée locale de l’ordinateur. De plus, depuis les versions Vista de Windows, on ne peut plus dialoguer avec les services qui fonctionnent dans la session 0 de l’ordinateur.

Dans ces deux cas, on privilégiera une communication par TCP/IP client-serveur. 

1. Définitions

Client/Serveur

L’environnement client/serveur désigne un mode de communication à travers un réseau entre plusieurs programmes : l’un, qualifié de client, envoie des requêtes ; le ou les autres, qualifiés de serveurs, attendent les requêtes des clients et y répondent. Le réseau peut être juste la boucle locale d’un seul ordinateur. 

TCP/IP

La suite TCP/IP est l’ensemble des protocoles utilisés pour le transfert des données sur Internet. Ils assurent la connexion, l’envoi et la réception de données d’un point à un autre.

Adresse IP

Il s’agit du numéro d’identification d’une carte réseau d’un ordinateur sur un réseau local ou internet. Un ordinateur peut posséder plusieurs cartes réseau et peut donc être accessible par plusieurs adresses IP.

Port

Plusieurs applications peuvent fonctionner en même temps sur l’ordinateur. La spécification d’un port d’écoute permet de distinguer quelle application écoute sur quel port afin que les messages ne se mélangent pas entre les applications. 

Socket

Il s’agit d’une interface logicielle avec les services du système d’exploitation grâce à laquelle un développeur exploitera facilement et de manière uniforme les services d’un protocole réseau.

Il lui sera ainsi par exemple aisé d’établir une session TCP puis de recevoir et d’expédier des données grâce à elle. Cela simplifie sa tâche car cette couche logicielle, de laquelle il requiert des services en appelant des fonctions, masque le travail nécessaire de gestion du réseau, pris en charge par le système. Le terme socket désigne en pratique chaque variable employée...

Conclusion

Ce chapitre nous a permis de manipuler les messages Windows ainsi que les composants de connexion Indy TCP fournis par Delphi. Nous avons implémenté un réseau de communication en utilisant quelques notions vues précédemment dans cet ouvrage comme le threading, l’utilisation d’un composant XML ou l’élaboration d’un service. Le choix du XML est arbitraire et nous aurions pu utiliser le formalisme JSON pour effectuer les échanges. Nous avons écrit un protocole de communication pour échanger des messages. Cependant, aucune application tierce ne peut se brancher sur notre système pour communiquer : il est nécessaire que cette application connaisse notre protocole.