# C et C++ > C > Contribuez >  [X11] quivalent xchat : Exemple de communication interclients [Sources]

## souviron34

Bonjour

aprs un petit thread sur le forum (_C- C++ -> blibliothques -> Autres : x11 utilisation des atomes_) sur la communication inter-clients, je pose ici cet exemple du style de chat (en X11).

On utilise Xlib, et la Xtoolkit (_pour faire l'IHM simplement_).

*Communication inter-client (entre 2 applications) :*

Il peut tre trs utile de communiquer entre deux applications, et de senvoyer des messages.

Une mthode courante est le principe du _ Cut and Paste_ . Des mthodes sont fournies par la Xlib pour cette fonctionalit. Elles font cependant parties dun ensemble plus vaste de fonctions et de paramtres, destins de manire plus gnrale  la communication inter-client.

Cest dailleurs grce  ces mthodes que le serveur communique avec les applications X.

Certains emplacements physiques, situs sur le serveur, contiennent les informations qui relient le serveur aux applications. Ces emplacements sont dtermins, et portent le nom  *Atom*  . Ces  _Atom_  sont identifis par un nom, qui est  le moyen de les reprer  partir de nimporte quelle application. On pourraient considrer ces  _Atom_  comme des sockets : ce sont des canaux o les clients ou le serveur envoie des messages. Et lun ou lautre peuvent tre  lcoute des changements qui y arrivent.

Les  _Atom_  physiquement prsents sur le serveur sont ceux servant  la communication entre le serveur et ses clients. Ils dfinissent par exemple la table de couleurs par dfaut, la police de caractre par dfaut, ....

Mais la Xlib fourni un mcanisme afin quune application puisse elle-mme se crer un  _Atom_.  Et dans ce cas, si deux applications  coutent   le mme _Atom_, elles peuvent se synchroniser ou se partager des donnes.

En rsum, il y a quatre (4) manires de communiquer entre clients :


envoyer un message spcifique  une application spcifique (_XSendEvent avec un vnement du type ClientMessage_) ; 
utiliser les buffers  _Cut_  et  _Paste_  fournis par la Xlib ; 
utiliser le mcanisme dit de *slection* (_qui envoie un XSelectionEvent au serveur_), qui est en fait la gnralisation du  _Cut_  et  _Paste_  ; 
enfin on peut utiliser directement les _Atom_.


Le programme prsent ci-dessous (_communic.c_) met en place ce mcanisme, en utilisant les *Atom*. Si on le lance  partir de deux stations (_Display_), on pourra dialoguer entre les 2. Compiler-le et essayer le. Vous pouvez le gnraliser avec plusieurs serveurs (_en utilisant la fonction_ _XAddHost_).

Programme communic.c :




```

```

----------

