Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
reseaux:tp:serialisation [2021/12/21 18:30] – [Objectif] phil | reseaux: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] | ||
Ligne 7: | Ligne 9: | ||
* **Vidéo** sur YouTube: < | * **Vidéo** sur YouTube: < | ||
- | **Objectif** \\ | + | |
+ | ---- | ||
+ | |||
+ | === Objectif | ||
Emuler un capteur mesurant des données météorologiques (température, | Emuler un capteur mesurant des données météorologiques (température, | ||
+ | |||
+ | ---- | ||
==== 1. Emulation en Python ==== | ==== 1. Emulation en Python ==== | ||
+ | |||
=== 1.1 Module d’émulation des capteurs === | === 1.1 Module d’émulation des capteurs === | ||
+ | |||
+ | |||
Le module // | Le module // | ||
Ligne 75: | Ligne 86: | ||
</ | </ | ||
+ | {{ : | ||
=== 1.2 Client / Serveur === | === 1.2 Client / Serveur === | ||
* **Serveur** | * **Serveur** | ||
Ligne 89: | Ligne 101: | ||
s = socket.socket(socket.AF_INET, | s = socket.socket(socket.AF_INET, | ||
- | s.bind((' | + | s.bind((' |
while True: | while True: | ||
Ligne 152: | Ligne 164: | ||
s = socket.socket(socket.AF_INET, | s = socket.socket(socket.AF_INET, | ||
- | s.bind((' | + | s.bind((' |
samples = 0 # Numéro de l' | samples = 0 # Numéro de l' | ||
Ligne 199: | Ligne 211: | ||
msg = "{}, {}, {}" | msg = "{}, {}, {}" | ||
- | s.sendto (msg.encode(), | + | s.sendto (msg.encode(), |
time.sleep(10) | time.sleep(10) | ||
</ | </ | ||
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' | 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' | ||
+ | {{ : | ||
=== 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(), | + | s.sendto (json.dumps(j).encode(), |
time.sleep(10) | time.sleep(10) | ||
</ | </ | ||
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. \\ | ||
- | < | + | < |
import socket | import socket | ||
import binascii | import binascii | ||
Ligne 250: | Ligne 263: | ||
s = socket.socket(socket.AF_INET, | s = socket.socket(socket.AF_INET, | ||
- | s.bind((' | + | s.bind((' |
samples =0 | samples =0 |