Académique Documents
Professionnel Documents
Culture Documents
I NS TI TU T S UP É RI EU R DE L’I NF O RM ATI QU E DU K EF
Objectif principal :
Le but principal de ce TP est d'enseigner aux étudiants les concepts fondamentaux de
la collecte de données dans un contexte IoT (Internet des Objets) en utilisant le
protocole de communication UDP. Il vise à familiariser les étudiants avec la création
d'applications distribuées qui collectent des données à partir de capteurs répartis sur
un réseau. Il comprend trois composants principaux :
Serveur de Collecte de Données (DataCollectionServer) : Cette classe représente le
serveur central chargé de recevoir, traiter et afficher les données provenant de
capteurs IoT répartis sur un réseau. Le serveur attribue également des numéros de
capteur uniques aux capteurs.
Simulateur de Capteur (SensorSimulator) : Cette classe simule un capteur IoT en
générant des données simulées (par exemple, la température) et en les envoyant au
serveur de collecte de données via UDP. Chaque simulateur de capteur est identifié
par un numéro unique attribué par le serveur de numérotation des capteurs.
Serveur de Numérotation des Capteurs (SensorNumberServer) : Ce serveur attribue
des numéros de capteur uniques aux simulateurs de capteurs qui en font la demande.
Il assure ainsi que chaque capteur a un numéro d'identification unique.
Le TP enseigne les concepts clés suivants :
La gestion des sockets UDP pour la communication réseau.
La collecte de données provenant de capteurs répartis sur un réseau.
L'attribution de numéros de capteur uniques pour identifier chaque capteur.
1
La simulation de capteurs IoT et la génération de données simulées.
La coordination entre les simulateurs de capteurs et le serveur central.
1. Crée un DatagramSocket pour écouter sur un port donné (dans cet exemple, le
port 9876) afin de recevoir les données des capteurs.
import java.net.*;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
try {
socket = new DatagramSocket(9876);
//Le socket UDP est créé et lié au port 9876 pour écouter les données entrantes.
System.out.println(sensorData);
}
} catch (IOException e) {
e.printStackTrace();
//le socket est fermé proprement pour libérer les ressources lorsque le programme se
termin
} finally {
if (socket != null && !socket.isClosed()) {
socket.close();
}
}
}
}
import java.net.*;
import java.io.*;
import java.util.Random;// Importation de la classe Random pour générer des nombres
aléatoires.
while (true) {
// Une température simulée est générée à l'aide d'un générateur de nombres
aléatoires. La température varie entre 20°C et 30°C.
random.nextFloat() génère un nombre décimal aléatoire entre 0 (inclus) et 1
(exclus). En d'autres termes, il génère un nombre à virgule flottante (float)
aléatoire dans l'intervalle [0, 1).
// Un objet ServerSocket est créé pour écouter les demandes de numéro de capteur sur
le port 12345.
try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Serveur de numérotation des capteurs en
attente...");
// Le serveur entre dans une boucle infinie pour attendre en permanence les demandes
de numéro de capteur des clients.
while (true) {
//Lorsqu'une connexion TCP est établie avec un client, un objet Socket est créé pour
gérer la communication avec ce client.
Socket clientSocket = serverSocket.accept();
System.out.println("Nouvelle demande de numéro de capteur
reçue.");
int sensorNumber = assignSensorNumber(); // Un numéro de capteur
unique est attribué au client en appelant la méthode
assignSensorNumber()
sensorNumber); System.out.println("Numéro de capteur attribué : " +