reseaux:tp:serialisation

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
reseaux:tp:serialisation [2021/12/21 18:30] – [1. Emulation en Python] philreseaux:tp:serialisation [2021/12/21 18:49] – [1.3 JSON] phil
Ligne 2: Ligne 2:
  
 ===== TP - Envoi de données structurée (sérialisation) ===== ===== TP - Envoi de données structurée (sérialisation) =====
 +
 +
 [Mise à jour le 20/12/2021] [Mise à jour le 20/12/2021]
  
   * **Source** : Mooc Fun "Programmer l'internet des objets"   * **Source** : Mooc Fun "Programmer l'internet des objets"
   * **Vidéo** sur YouTube: <html><a href="https://www.youtube.com/watch?time_continue=228&v=mRuEiwa7Z74&feature=emb_logo" target="_blank">La sérialisation</a></html>   * **Vidéo** sur YouTube: <html><a href="https://www.youtube.com/watch?time_continue=228&v=mRuEiwa7Z74&feature=emb_logo" target="_blank">La sérialisation</a></html>
 +
 +
 +----
  
 === Objectif === === Objectif ===
 +
 Emuler un capteur mesurant des données météorologiques (température, humidité, pression) et les envoyer sur un serveur pour traitement. Le but de cette manipulation est de mettre en place la chaîne complète de traitement pour étudier les différents mécanismes de représentation des données. Emuler un capteur mesurant des données météorologiques (température, humidité, pression) et les envoyer sur un serveur pour traitement. Le but de cette manipulation est de mettre en place la chaîne complète de traitement pour étudier les différents mécanismes de représentation des données.
 +
 +----
  
 ==== 1. Emulation en Python ==== ==== 1. Emulation en Python ====
 +
  
  
  
 === 1.1 Module d’émulation des capteurs === === 1.1 Module d’émulation des capteurs ===
 +
 +
 Le module //virtual_sensor.py// permet d’émuler des capteurs afin que chaque instance de la classe puisse envoyer des valeurs plausibles de température, pression et humidité. Le module //virtual_sensor.py// permet d’émuler des capteurs afin que chaque instance de la classe puisse envoyer des valeurs plausibles de température, pression et humidité.
  
Ligne 75: Ligne 86:
 </code> </code>
  
 +{{ :reseaux:tp:clientserveur.png?nolink&100|}}
 === 1.2 Client / Serveur === === 1.2 Client / Serveur ===
   * **Serveur**   * **Serveur**
Ligne 89: Ligne 101:
  
 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-s.bind(('127.0.0.1', 33033))+s.bind(('0.0.0.0', 33033))
  
 while True: while True:
Ligne 152: Ligne 164:
  
 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-s.bind(('127.0.0.1', 33033))+s.bind(('0.0.0.0', 33034))
  
 samples = 0 # Numéro de l'échantillon reçu samples = 0 # Numéro de l'échantillon reçu
Ligne 199: Ligne 211:
  
     msg = "{}, {}, {}".format(t, p, h)     msg = "{}, {}, {}".format(t, p, h)
-    s.sendto (msg.encode(), ("127.0.0.1", 33033))+    s.sendto (msg.encode(), ("127.0.0.1", 33034))
     time.sleep(10)     time.sleep(10)
 </code> </code>
Ligne 210: Ligne 222:
 Coder la désérialisation est beaucoup plus complexe que sérialiser. Il faut prendre en compte tous les possiblités de codage d'un nombre. Par exemple, pour la valeur 10 : 10 10.0 +10 1e1, l'ajout d'espaces, de tabulation de retour à la ligne. Les modules JSON permettent de simplifier les mises en oeuvre avec du code déjà écrit et éprouvé, pour une grande variété de structures et de données. Coder la désérialisation est beaucoup plus complexe que sérialiser. Il faut prendre en compte tous les possiblités de codage d'un nombre. Par exemple, pour la valeur 10 : 10 10.0 +10 1e1, l'ajout d'espaces, de tabulation de retour à la ligne. Les modules JSON permettent de simplifier les mises en oeuvre avec du code déjà écrit et éprouvé, pour une grande variété de structures et de données.
  
 +{{ :reseaux:tp:json.png?nolink&100|}}
 === 1.3 JSON === === 1.3 JSON ===
 Le plus simple pour transmettre des données multiples est d’utiliser le codage **JSON**. En Python, le module json offre les outils de **sérialisation** (**dumps**) et de **désérialisation** (**loads**) qui facilitent grandement la programmation. Le plus simple pour transmettre des données multiples est d’utiliser le codage **JSON**. En Python, le module json offre les outils de **sérialisation** (**dumps**) et de **désérialisation** (**loads**) qui facilitent grandement la programmation.
Ligne 233: Ligne 246:
  
     j = [t, p, h]     j = [t, p, h]
-    s.sendto (json.dumps(j).encode(), ("127.0.0.1", 33033))+    s.sendto (json.dumps(j).encode(), ("127.0.0.1", 33035))
     time.sleep(10)     time.sleep(10)
 </code> </code>
Ligne 244: Ligne 257:
 Calcule également la **taille maximale** du message échangé entre le client et le serveur. \\ Calcule également la **taille maximale** du message échangé entre le client et le serveur. \\
  
-<code pyton minimalserver2.py>+<code python minimalserver2.py>
 import socket import socket
 import binascii import binascii
Ligne 250: Ligne 263:
  
 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-s.bind(('0.0.0.0', 33033))+s.bind(('0.0.0.0', 33035))
  
 samples =0 samples =0
  • reseaux/tp/serialisation.txt
  • Dernière modification : 2021/12/21 18:57
  • de phil