1 Programmation Client/Serveur basée sur TCP/IP
Transcription
1 Programmation Client/Serveur basée sur TCP/IP
Outils Informatique pour l’ingénieur TD 1 Réseau et Web IP, Client/serveur 1 Programmation Client/Serveur basée sur TCP/IP 1.1 Buts de cette réalisation Ce TP sur la programmation client/serveur a pour but : • l’étude du fonctionnement d’une application de type client/serveur, • la mise en œuvre d’un protocole de communication basé sur TCP/IP. 1.2 Quelques explications sur la programmation d’une application de type client/serveur L’architecture de type client/serveur est l’une des architectures logicielles les plus utilisées pour faire communiquer des ordinateurs distants à travers un réseau. Il s’agit de définir un ordinateur comme étant le serveur, c’est à dire qu’il est à l’écoute des requêtes d’un ou plusieurs ordinateurs appelés clients. Afin de faire communiquer deux machines, il faut d’une part qu’elles soient connectées via un réseau, et d’autre part qu’elles utilisent un protocole commun. Nous utiliserons dans le cadre de ce TP le protocole de communication TCP/IP, qui est le plus utilisé dans le monde (notamment par internet), et nous définirons un protocole application qui permettra au serveur et aux clients de communiquer. 1.3 Définition de l’application Un serveur mesure des températures et les envoie sur demande aux clients. Le serveur se met à l’écoute du port 12512, que nous choisissons arbitrairement (la règle générale est d’éviter les ports de numéro faible pouvant être réservés à des applications standards telles http sur le port 80, le mail sur le port 25,…). Il est alors prêt à recevoir une connexion. Dès qu’un client se connecte à ce port, le serveur lui envoie une ligne de texte, terminée par un retour chariot , afin de s’identifier. Par exemple il peut envoyer « Mon protocole v1.0 ». Le client sait alors que le serveur est prêt et qu’ils vont pouvoir dialoguer suivant le protocole établi. Le serveur, de son côté, se met à l’écoute des ordres du client : s’il reçoit la ligne de texte « read » (dans le protocole choisi, les informations circulent sous la forme de lignes de textes se terminant par un retour chariot ), il envoie sa dernière mesure de température (après l’avoir transformée de nombre flottant en texte), puis il se met à nouveau en attente. S’il ne reçoit pas de commande pendant 2 secondes, ou bien s’il reçoit autre chose que « read », il ferme la connexion et se retrouve de nouveau en attente sur le port 12512. L’application client, quant à elle, permet à l’utilisateur de saisir l’adresse d’un serveur, et lui demande un relevé de température toutes les 50 millisecondes. Il affiche alors les températures reçues dans un graphe. Lorsque l’utilisateur souhaite arrêter les mesures, le client envoie la ligne « quit » au serveur. D’après le protocole, le serveur fermera alors lui aussi sa connexion car la ligne est différente de « read ». : • Programmer le serveur : sa fonction est d’écouter le port 12512, puis d’écrire la ligne « Mon protocole v1.0 » dès qu’il reçoit une demande de connexion. Attention, le protocole est sensible à la casse (majuscules/minuscules). Puis, en boucle, il lit le port TCP : • Si l’ordre « read » lui est envoyé, alors il envoie au client une mesure de température terminée par . • Si il attend 2 secondes sans ordre ou bien s’il reçoit autre chose que « read », il sort de la boucle. • La boucle se termine si il reçoit autre chose que « read », si il y a une erreur TCP, si le serveur attend 2 secondes, ou bien si l’utilisateur appuie sur un bouton stop. A la fin de la boucle, le serveur ferme la connexion et se retrouve à nouveau en attente sur le port 12512 • La face avant de ce VI est donnée ci-dessous : Indicateur Figure 4.1: Face avant du serveur : • Programmer le client : sa fonction est de se connecter sur le port 12512 du serveur choisi par l’utilisateur. Après avoir vérifié qu’il se trouve bien en communication avec un serveur du protocole désiré (lecture de la ligne « Mon protocole v1.0 »), il envoie la commande « read » toutes les 50 millisecondes. • Lorsque l’utilisateur clique sur un bouton « Fermer la connexion », le client envoie le texte « quit » au serveur et ferme la connexion. • La boucle du client se termine donc sur erreur TCP ou sur l’appuie du bouton stop. • La face avant de ce VI est donnée ci-dessous : Commande Figure 4.2: Face avant du client : Graphe déroulant • Lorsque tout fonctionne, réfléchir à la gestion des erreurs qui peuvent être nombreuses (fermeture intempestive de la connexion, mauvais protocole, client ou serveur bogué,…) et y proposer des solutions : délai maximal d’attente, gestion de la variable status de la sortie erreur des vi gérant TCP. • Parallèlement à cela, tester son client avec le serveur du binôme voisin, et vice-versa. 1.4 Quelques vi utiles Gestion des erreurs • Les erreurs sont présentées sous la forme d’un cluster (équivalent d’un type enregistrement ou record en Ada) composé d’un booléen vrai si il y a une erreur, d’un code d’erreur, et d’un texte. Afin de savoir si une erreur a eu lieu, il suffit donc de tester le champs status du cluster d’erreur. Pour accéder à ce champs, on utilise le vi Désassembler par nom du menu Cluster. TCP Créer un auditeur Menu : Communication 9 TCP TCP Attendre auditeur • Prépare le programme à se mettre en attente de connexion sur le port spécifié: - port : numéro du port à préparer - ID de l’auditeur: identificateur de l’auditeur utilisé par le vi d’écoute TCP - adresse à distance : adresse de la machine ayant demandé la connexion - sortie d’erreur : cluster contenant des informations sur le fonctionnement du vi. Si il y a eu une erreur, son composant Status vaut vrai en sortie, faux sinon. un Menu : Communication 9 TCP • Se met en attente d’une connexion sur le port de l’auditeur : - ID d’auditeur d’entrée : identificateur de l’auditeur sur lequel se mettre en attente - résoudre l’adresse à distance : si vrai, le vi utilise un DNS pour tenter d’obtenir l’adresse alphanumérique du client, si faux, c’est l’adresse IP du client qui figure dans l’adresse à distance. - timeout (-1) : ce vi provoquant une attente potentiellement infinie (si absence de demande de connexion), il est possible de borner l’attente dans le temps - ID de connexion: identificateur de connexion utilisé par les autres vi utilisant TCP. - adresse à distance : adresse de la machine ayant demandé la connexion - sortie d’erreur : cluster contenant des informations sur le fonctionnement du vi. Si il y a eu une erreur, son composant Status vaut vrai en sortie, faux sinon. Ouverture d’une connexion sur un port TCP distant Menu : Communication 9 TCP • Ouvre une connexion TCP sur le port spécifié du serveur spécifié: - adresse : adresse du serveur - port : port du serveur sur lequel se connecter - timeout : idem TCP Attendre un auditeur - id de connexion : identificateur de la connexion créée utilisé par les autres vi TCP - sortie d’erreur : idem TCP listen Lecture sur un port TCP ouvert Menu : Communication 9 TCP Utilisation typique en mode CRLF Ecriture sur TCP ouvert un port Menu : Communication 9 TCP Utilisation typique en mode CRLF Fermeture connexion TCP • Tente de lire sur une connexion TCP: - id de connexion : identificateur de la connexion (provient de TCP Listen ou de TCP Open Connexion) - octets à lire : choisir 1024. Nombre d’octets que le vi cherche à lire, si on ne met rien, ce vi ne lit rien !!! - timeout (-1) : idem TCP Listen - mode (standard) : choisir le mode CRLF. En mode CRLF, lit une ligne jusqu’au prochain retour chariot - id de connexion de sortie : identificateur de connexion à utiliser pour des opérations ultérieures sur la connexion, possède la même valeur que id de connexion. - sortie de données : chaîne de caractères lue (attention, en mode CRLF, elle se termine normalement par ) - sortie d’erreur : idem TCP Listen d’une • Tente d’écrire sur une connexion TCP: Les entrées/sorties de ce vi sont similaires à TCP read. - entrée de données : chaîne de caractère à envoyer. Attention, si l’on a choisi le mode CRLF, il faut penser à insérer un retour chariot à la fin. Menu : Communication 9 TCP • Ferme une connexion TCP: - id de connexion : identificateur de la connexion Conversion d’une chaîne en réel Menu : Chaînes 9 Conversions chaînenombre chaîne : chaîne de caractères représentant un nombre au format ingénieur - nombre : nombre résultant de la conversion de chaîne Conversion d’un réel en chaîne Menu : Chaînes 9 Conversions chaînenombre Concaténation chaînes Menu : Chaînes Fonction inverse de formatage - nombre : réel à convertir - chaîne au format ingénieur : chaîne de caractères image du réel en entrée de Concatène (met bout à bout) des chaînes de caractères. Ce vi est dimensionnable (comme assembler un tableau) Le calcul de la température sera fictif et basé sur un vi de simulation : Menu Tutorial Thermomètre numérique.vi 2 Adressage IP et masque de sous-réseau Un site local est composé de deux sous-réseaux physiques, reliés au reste du monde via une même passerelle. Ce site possède une unique adresse IP : 189.44.0.0. Quelle est la classe de cette adresse ? Proposez, en utilisant la notion de masque de sous-réseau, un mode d’adressage des différentes stations sur le site pour que la passerelle n’ait pas à diffuser systématiquement sur chacun des deux sous-réseaux tous les messages reçus du reste du monde. Proposez un mode d’adressage de l’IMP jouant le rôle de passerelle.