| 1 | = Modèle client-serveur |
| 2 | |
| 3 | == Objectif de la séance |
| 4 | |
| 5 | Le but de cette séance est d'expérimenter le modèle client-serveur au dessus de TCP-IP au travers de la programmation d'un jeu. |
| 6 | Le TP va se dérouler sur les PC de développement. Nous verrons plus tard deux autres applications du modèle client-serveur avec le serveur HTTP et le protocole MQTT qui permet l'échange d'informations entre des capteurs WIFI et une station de base suivant un modèle client-broker. |
| 7 | |
| 8 | ** Schéma de principe d'un échange client-serveur avec le protocole TCP (connecté) |
| 9 | [[Image(htdocs:png/client-serveur.png,300px,nolink)]] |
| 10 | |
| 11 | |
| 12 | Pour aujourd'hui, vous allez programmer deux applications. La première met en œuvre N clients TCP et 1 serveur TCP. La seconde application mettra en œuvre N client-serveurs et 1 serveur. |
| 13 | |
3 | | 1. Nous allons commencer par mettre en place l'infrastructure pour permettre aux personnes présentes de communiquer. Pour cela, faire la liste des personnes présentes dans la salle et les associer au numéro IP. Pour obtenir le numéro IP de sa machine, vous pouvez utiliser `hostname -I` ou `ifconfig`. |
4 | | 2. Récupérer l'archive [htdocs://docs/tcptme.zip tcptme.zip] et la décompresser. |
5 | | 3. Compiler le serveur_simple et l'exécuter sur une première fenêtre de terminal en passant en paramètre le numéro du port sur lequel écoute le serveur. |
| 16 | * Nous allons commencer par mettre en place l'infrastructure pour permettre aux personnes présentes de communiquer. Pour cela, faire la liste des personnes présentes dans la salle et les associer au numéro IP. Pour obtenir le numéro IP de sa machine, vous pouvez utiliser `hostname -I` ou `ifconfig`. |
| 17 | |
| 18 | * Récupérer l'archive [htdocs://docs/tcptme.zip tcptme.zip], la décompresser et compiler l'ensemble avec le Makefile. |
| 19 | |
| 20 | * Exécuter le serveur_simple sur une première fenêtre de terminal en passant en paramètre le numéro du port sur lequel écoute le serveur. |
18 | | Application de vote |
19 | | 6. Récupérer le programme qui va servir de base au clients de vote [htdocs://docs/clientvote.zip clientvote.zip] et décompresser le. |
20 | | 7. Pour le compiler |
| 32 | * `vote_curses.c` est un programme qui utilise une bibliothèque permettant des réaliser des menus dans un format text. Ce programme permet la sélection entre 4 valeurs : 1, 2, 3 ou 4. Modifier le fichier `vote_curses.c` pour envoyer le vote choisi vers un serveur:port particulier en utilisant votre fonction `envoyer_message()`. |
| 33 | |
| 34 | * Modifier le fichier `server_vote.c` pour ajouter un traitement sur les votes consistant à compter les votes. |
| 35 | |
| 36 | * Créer un `serveur_espion.c` qui va recevoir des messages envoyés par `server_vote` lorsque qu'il reçoit un vote pour `4`. Le message contiendra l'adresse ip du votant. |
| 37 | |
| 38 | |
| 39 | == Programmation d'un jeu |
| 40 | |
| 41 | Le second exemple est un peu plus compliqué. Il s'agit de programmer un jeu dont les règles sont les suivantes : |
| 42 | * Le jeu se joue avec au plus 4 joueurs. |
| 43 | * Au départ, chaque joueur reçoit une carte tirée au hasard parmi les 100 cartes numérotées de 1 à 100. |
| 44 | * Lorsque tous les joueurs sont servis, ils reçoivent un signal de démarrage. |
| 45 | * Chaque joueur doit alors compter dans sa tête le nombre de secondes à partir du signal de démarrage et poser sa carte lorsque le nombre de secondes écoulées est égal à la valeur de sa carte. |
| 46 | * Si les cartes sont posées dans l'ordre croissant, le tour est gagné. Notez que seul l'ordre est important. |
| 47 | * Si le tour est gagné, chaque joueur reçoit une carte de plus au tour suivant et il devra déposer toutes ses cartes dans l'ordre. |
| 48 | * Si le tour est perdu, on recommence le jeu avec 1 carte par joueur. |
| 49 | |
| 50 | Remarques : |
| 51 | * Le but est de gagner contre le jeu, il n'y a pas un gagnant parmi les joueurs. |
| 52 | * Vous pouvez vous limiter à une carte par tour et compter le nombre de tour gagnant au début. |
| 53 | * Vous pouvez vous limiter à 50 cartes pour réduire la durée d'un tour. |
| 54 | |
| 55 | Pour ce jeu, vous allez devoir écrire 3 programmes : |
| 56 | 1. Le maitre du jeu qui |
| 57 | * enregistre les joueurs, |
| 58 | * leur distribue les cartes, |
| 59 | * donne le signal de démarrage, |
| 60 | * reçoit les cartes |
| 61 | * et teste si l'ordre est correct pour déterminer si le tour est gagnant |
| 62 | 2. Le joueur aspect client qui |
| 63 | * s'enregistre auprès du maitre du jeu |
| 64 | * pose sa carte en envoyant un message lorsque le temps est écoulé |
| 65 | 3. Le joueur aspect serveur qui |
| 66 | * reçoit une carte (un nombre) et c'est le signal de démarrage |
| 67 | * reçoit l'information sur la réussite du tour. |