Changes between Version 5 and Version 6 of IOC20_T05


Ignore:
Timestamp:
Feb 28, 2020, 12:24:35 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC20_T05

    v5 v6  
     1= Modèle client-serveur
     2
     3== Objectif de la séance
     4
     5Le 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.
     6Le 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
     12Pour 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
    114== Premiers pas
    215
    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.
    621{{{#!c
    722gcc -o server_simple server_simple.c
    823./server 8000
    924}}}
    10 4. Compiler `client2.c` et l'exécuter 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.
     25* 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.
    1126{{{#!c
    12 gcc -o client1 client1.c
    13 ./client1 localhost 8000 "Bonjour"
    14 ./client1 132.227.107.xx 8000 "Bonjour c'est moi"
     27./client_simple localhost 8000 "Bonjour"
     28./client_simple 132.227.107.xx 8000 "Bonjour c'est moi"
    1529}}}
    16 5. maintenant
     30* 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`
    1731
    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
     41Le 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
     50Remarques :
     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
     55Pour ce jeu, vous allez devoir écrire 3 programmes :
     561. 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
     622. 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é
     653. 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.