Changes between Version 2 and Version 3 of SujetTP4-2017


Ignore:
Timestamp:
Feb 17, 2017, 8:12:51 AM (8 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP4-2017

    v2 v3  
    33== Objectif ==
    44
    5 Le but de ce TME est de créer un site web consultable par un browser web permettant de changer l'état des leds. Le serveur web est écrit en Python, à la réception des requêtes du client, il exécute des scripts CGI (Common Gateway Interface) écrit également en Python pour produire des pages HTML dynamiques. Les scripts CGI devront communiquer avec le programme écrit en C contrôlant les LEDs. La communication entre les scripts et le programme de contrôle se fera par fifo UNIX. Le programme en C sera : soit la version permettant le contrôle depuis une application utilisateur (avec les droits de **root**), soit par une application utilisateur qui communique avec un driver. Je ne demande pas cette seconde possibilité parce que vous allez devoir insérer un module dans le noyau et c'est une difficulté suplémentaire qui n'apporte rien vis-à-vis de ce que vous allez voir aujourd'hui.
     5Le but de ce TME est de créer un site web consultable par un browser web permettant de changer l'état des leds. Le serveur web est écrit en Python, à la réception des requêtes du client, il exécute des scripts CGI (Common Gateway Interface) écrit également en Python pour produire des pages HTML dynamiques. Les scripts CGI devront communiquer avec le programme écrit en C contrôlant les LEDs. La communication entre les scripts et le programme de contrôle se fera par fifo UNIX. Le programme en C sera : soit la version permettant le contrôle depuis une application utilisateur (avec les droits de **root**), soit par une application utilisateur qui communique avec un driver. Je ne demande pas cette seconde possibilité parce que vous allez devoir insérer un module dans le noyau et c'est une difficulté supplémentaire qui n'apporte rien vis-à-vis de ce que vous allez voir aujourd'hui.
    66
    77Pour ce faire, nous allons procéder en deux temps.
     
    2626
    2727Vous pouvez tester les programmes qui vous sont proposés.
    28 Je vous demande de lire les codes en commençant par les programmes python, en répondant aux questions
     28Je vous demande de lire les codes en commençant par les programmes python, en répondant aux questions suivantes.
     29Ces questions ne sont pas exhaustives, l'idée c'est d'avoir une "''compréhension''" de ce qu’est dans le code (vous devrez utiliser Google pour ça).
    2930
    3031**writer.py**
    31 - Dans quel répertoire est créee la fifo ?
     32- Dans quel répertoire est créée la fifo ?
    3233- Quelle différence mkfifo et open ?
    3334- Pourquoi tester que la fifo existe ?
    34 - A quoi sert flush ?
     35- À quoi sert flush ?
    3536- Pourquoi ne ferme-t-on pas la fifo ?
    3637
     
    7677Vous allez remarquer que lorsque le vous lancer un écrivain (en C ou en Pyhton) rien ne se passe tant que vous n'avez pas lancé un lecteur.
    7778
    78 - Expliquez le phénomème.
     79- Expliquez le phénomène.
    7980
    8081== 2. Création d'un serveur fake ==
     
    9091- lorsqu'il reçoit un message, il l'affiche et il renvoie dans la fifo f2s la dernière valeur lue sur stdin.
    9192
    92 Vous commencez par récuperer l'[attachment:fake.tgz archive] qui donne un point de dépoart.
     93Vous commencez par récupérer l'[attachment:fake.tgz archive] qui donne un point de départ.
    9394{{{
    9495fake
     
    106107
    107108Vous devez :
    108 1. modifier le select dans fake pour lire les deux fifos d'entrée stdin et s2f.
     1091. modifier le select dans fake pour lire les deux fifos d'entrées stdin et s2f.
    1091102. modifier server.py pour lire la valeur lue sur stdin.
    110111
     
    185186s2f.close()
    186187}}}
     188
    187189== 3. Création d'un serveur web ==
    188190
     
    206208
    207209**Pour tester le server http**
    208 - Dans un premier terminal, après l'avoir compiler, lancez le programme fake. Il s'agit du même programme fake.c que précédement, qui reçoit une requête depuis une fifo s2f et qui renvoi une réponse.
     210
     211- Dans un premier terminal, après l'avoir compilé, lancez le programme fake. Il s'agit du même programme fake.c que précédemment, qui reçoit une requête depuis une fifo s2f et qui renvoie une réponse.
    209212  {{{
    210213  cd fake
     
    217220  ../server.py
    218221  }}}
    219 - Sur votre navigateur préféré, visualisez la page index.html à l'adresse 127.0.0.1:8000
     222- Sur votre navigateur préféré, visualisez la page index.html à l'adresse `localhost:8X00` (ou `127.0.0.1:8X00`)
    220223  - Vous devez voir apparaitre un logo et une case avec un bouton enter.
    221224  - La page `index.html` contient deux "frames":
    222225    - Le premier avec le logo.
    223226    - Le second est contient la case et le bouton. Le code html de cette case est obtenu par l'exécution du programme Python `cgi-bin/main.py`.
    224       - Notez qu'il n'est pas très utile d'avoir produit cette page par un programme python car la page n'est pas dynamique (son code est toujours le même) mais c'est pour donner la possibilité de la rendre dynamique.
    225   - Lorsque vous écrivez quelque-chose dans la case, la page index.html demande l'exécution de script `cgi-bin/led.py`
    226   - le script `led.py` envoi le contenu de la case sur la fifo `s2f` attendue par `fake` et produit une page presque indentique à main.py avec deux différences.
     227      - Notez qu'il n'est pas très utile d'avoir produit cette page par un programme python, car la page n'est pas dynamique (son code est toujours le même) mais c'est pour donner la possibilité de la rendre dynamique.
     228  - Lorsque vous écrivez quelque chose dans la case, la page index.html demande l'exécution de script `cgi-bin/led.py`
     229  - le script `led.py` envoi le contenu de la case sur la fifo `s2f` attendue par `fake` et produit une page presque identique à main.py avec deux différences.
    227230    - Elle affiche ce qui a été reçu de la fifo `f2s`
    228231    - Elle est remplacée au bout d'une seconde par la page `main.py` grace à une commande `<META>`
    229232
    230233**server.py**
    231 Le server affiche la page index.htlm du présente dans le répetoire de lanceeltécoute le port 8000,
     234Le server écoute le port 8X00 et affiche la page index.htlm présente dans le répertoire wwww.
     235{{{
     236 X est une valeur entre 0 et 3, puisque nous allons avoir 4 serveurs HTTP par Raspberry.
     237}}}
     238 
    232239{{{#!python
    233240#!/usr/bin/env python
     
    238245server = BaseHTTPServer.HTTPServer
    239246handler = CGIHTTPServer.CGIHTTPRequestHandler
    240 server_address = ("", 8000)
     247server_address = ("", 8X00)
    241248handler.cgi_directories = ["/cgi-bin"]
    242249
     
    315322- Vous devez copier tout `server-fake` sur la carte de votre choix. Vous ne pouvez pas être plus de deux binômes par carte.
    316323- Vous lancez fake et le server http comme précédement.
    317 - Sur votre navigateur, vous devez mettre une exception au proxy pour l'adresse du routeurs des !RaspberryPi `132.227.102.36`.
    318 - Si vous êtes sur la carte **20**, vous mettez comme URL 132.227.102.36:8**020**. Vous faites de manière semblable pour les autres cartes.
    319 - Si vous êtes le second binôme sur la carte *20*, l'URL est 132.227.102.36.8**120**, et dans le script `server.py` vous devez écouter le port **8001**.
    320 - Le routeur des !RaspberryPi a été programmé pour renvoyer les requêtes http reçues sur le port 8xyy avec x=(0 ou 1) et yy=(20,21,...,25) sur le carte yy et le port 800x.
    321 
    322 **Travail demandé**
    323 
    324 - Modifier fake.c et led.py pour commander les leds.
     324- Sur votre navigateur, vous devez mettre une exception au proxy pour l'adresse du routeur des !RaspberryPi `132.227.102.36`.
     325- Si vous êtes sur la carte **20**, vous mettez comme URL 132.227.102.36:8**X20**. Vous faites de manière semblable pour les autres cartes.
     326- Si vous êtes le second binôme sur la carte *20*, l'URL est 132.227.102.36.8**120**, et dans le script `server.py` vous devez écouter le port **8100**.
     327- Le routeur des !RaspberryPi a été programmé pour renvoyer les requêtes http reçues sur le port 8xyy avec x=(0 ou 1) et yy=(20,21,...,26) sur le carte yy et le port 8X00.
     328
     329**Accès aux leds et au bouton poussoir par le serveur**
     330
     331- Modifier fake.c en ledbp.c et server.py pour commander les leds et lire le bouton poussoir
     332
     333  [[Image(htdocs:png/ledbp2server.png,nolink,400px)]]
     334
     335