wiki:IOC20_T05

Modèle client-serveur

Objectif de la séance

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. 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. cours détaillé sur TCP/IP

Schéma de principe d'un échange client-serveur avec le protocole TCP (connecté)

client-serveur.png

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.

Premiers pas

  • 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.
  • Récupérer l'archive tcptme.zip, la décompresser et compiler l'ensemble avec le Makefile.
  • 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.
    gcc -o server_simple server_simple.c
    ./server 8000
    
  • Exécuter le client_simple dans un second terminal pour l'envoi d'un message vers le serveur. Ce client permet d'envoyer un message pris sur la liste de commande. Vous pouvez envoyer des messages vers vous-même ou vers d'autres personnes.
    ./client_simple localhost 8000 "Bonjour"
    ./client_simple 132.227.107.xx 8000 "Bonjour c'est moi"
    
  • Modifier client_simple.c pour ajouter une fonction envoyer_message() qui encapsule l'envoi d'un message en tant que client socket-connect-write-close
  • 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().
  • Modifier le fichier server_vote.c pour ajouter un traitement sur les votes consistant à compter les votes.
  • 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.

Programmation d'un jeu

Le second exemple est un peu plus compliqué. Il s'agit de programmer un jeu dont les règles sont les suivantes :

  • Le jeu se joue avec au plus 4 joueurs.
  • Au départ, chaque joueur reçoit une carte tirée au hasard parmi les 100 cartes numérotées de 1 à 100.
  • Lorsque tous les joueurs sont servis, ils reçoivent un signal de démarrage.
  • 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.
  • Si les cartes sont posées dans l'ordre croissant, le tour est gagné. Notez que seul l'ordre est important.
  • 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.
  • Si le tour est perdu, on recommence le jeu avec 1 carte par joueur.

Remarques :

  • Le but est de gagner contre le jeu, il n'y a pas un gagnant parmi les joueurs.
  • Vous pouvez vous limiter à une carte par tour et compter le nombre de tour gagnant au début.
  • Vous pouvez vous limiter à 50 cartes pour réduire la durée d'un tour.

Pour ce jeu, vous allez devoir écrire 3 programmes :

  1. Le maitre du jeu est à la fois un serveur et un client
    • enregistre les joueurs,
    • leur distribue les cartes,
    • donne le signal de démarrage,
    • reçoit les cartes jouées par les joueurs
    • et teste si l'ordre est correct pour déterminer si le tour est gagnant
  1. Le joueur aspect client qui
    • s'enregistre auprès du maitre du jeu
    • pose sa carte en envoyant un message lorsque le temps est écoulé
  1. Le joueur aspect serveur qui
    • reçoit l'acquitement de connexion
    • reçoit une carte à juer (un nombre)
    • reçoit le signal de démarrage
    • reçoit l'information sur la réussite du tour.

Compte-rendu

Vous devez remettre les codes commentés de votre jeu et un compte-rendu explicant votre implémentation du jeu et expliquant la séquence des messages sous la forme d'un diagramme UML de séquences.

Last modified 2 years ago Last modified on Mar 25, 2022, 6:49:35 AM