En programmation client-serveur, on a généralement à écrire deux programmes : un programme appelé serveur et un programme appelé client. Ces deux programmes sont amenés à établir un dialogue à travers une connexion réseau. Cela signifie que les deux programmes peuvent être exécutés sur des systèmes (machines) différents, et que le réseau va être utilisé pour communiquer.
Dans le cadre des TPs de réseau, les communications se feront normalement en utilisant le protocole TCP/IP qui est un protocole connecté et fiable. Ce protocole est dit fiable car les données envoyées sont reçues dans l’ordre, sans perte, ni duplication. C’est seulement pour le dernier TP que le protocole non connecté UDP sera abordé.
Pour pouvoir communiquer en TCP, il faut commencer par établir une connexion. Pour cela, le programme qui a le rôle de serveur se met en état d’attendre une demande de connexion. Le programme client va alors demander à se connecter au serveur. Lorsque ce dernier accepte la demande de connexion, la connexion est établie et le dialogue peut commencer.
<aside> ☝
On peut remarquer que ce fonctionnement est analogue à une conversation téléphonique. Avant de pouvoir dialoguer, il faut établir une connexion où l’un des interlocuteurs (le client) appelle l’autre (le serveur). Lorsque le serveur répond, la connexion est établie et elle reste active jusqu’à ce qu’un des interlocuteurs raccroche.
</aside>
Le client et le serveur dialoguent ensuite suivant un protocole qui définit la nature et l’ordre des messages échangés. Le protocole dépend du problème à résoudre, et est à définir avant d’écrire les programmes. Bien souvent les protocoles simples auront la forme suivante :
Les principales caractéristiques des programmes client et serveur sont ainsi :
Les connexions TCP se font entre les systèmes en utilisant les adresses IP et des numéros de port. Un numéro de port est un nombre entier sur 16 bits (1–65535). Une connexion TCP est alors identifiée de manière unique par un quadruplet (adresse source, port source, adresse destination, port destination).
Pour la suite, nous allons développer un exemple simple : un serveur de calcul qui doit permettre de calculer des additions.
Le serveur commence par se mettre en attente de connexions sur le port no 4242. Lorsque le client se connecte au serveur, il lui envoie deux nombres entiers. Le serveur reçoit ces deux valeurs, en calcule la somme puis retourne le résultat au client. Les valeurs envoyées par le programme client seront demandées à l’utilisateur, et le résultat sera affiché.