Dans un réseau local, les machines communiquent entre elles grâce à des adresses IP uniques générées automatiquement par un serveur DHCP (Dynamic Host Configuration Protocol).
Chaque adresse IP (IPv4), est de la forme W.X.Y.Z où W, X, Y et Z sont des nombres de 0 à 255 séparés par des points.
Pour mieux gérer la configuration d’un réseau local, l’administrateur informatique d’une société paramètre le serveur DHCP de sorte qu’il génère automatiquement des adresses IP distinctes de la forme 192.168.72.Z où Z représente un nombre qui varie de 1 à 254.
Dans ce contexte, on envisage de concevoir une application, enrichie par une interface graphique, qui simule l’attribution d’adresses IP aux machines d’un réseau local par un serveur DHCP, puis vérifie si deux machines d’adresses données IP1 et IP2 font partie de ce réseau local.
Cette application permet :
- de saisir un entier N (5 ≤ N ≤ 200) qui représente le nombre de machines du réseau local.
- de remplir un tableau T par N adresses IP distinctes générées aléatoirement de la forme 192.168.72.Z (où Z représente un nombre qui varie de 1 à 254),
- de saisir deux adresses IP distinctes notées IP1 et IP2 et d’afficher l’un des deux messages ci-dessous :
- "Communication possible" lorsque les adresses IP1 et IP2 font partie du réseau local (IP1 et IP2 existent dans le tableau T).
- "Communication impossible" dans le cas contraire.
Exemple :
Pour le tableau T suivant contenant 6 adresses IP distinctes générées aléatoirement par un serveur DHCP :
![]()
Pour IP1 = 192.168.72.5 et IP2 = 192.168.72.51 le programme affiche "Communication possible" car IP1 et IP2 existent dans le tableau T.
Pour IP1 = 192.168.72.55 et IP2 = 192.168.72.51 le programme affiche "Communication impossible" car IP1 n’existe pas dans le tableau T.
Travail demandé
1. Créer l’interface graphique illustrée dans la figure Fig-1 suivante et l’enregistrer sous le nom InterfaceRéseau.

2. Créer un programme en python et l’enregistrer sous le nom Réseau, dans lequel on demande :
a. D’implémenter l’algorithme suivant de la procédure DHCP permettant de remplir, aléatoirement, un tableau T par N adresses IP de la forme 192.168.72.Z (où Z représente un nombre qui varie de 1 à 254).

b. D’écrire une fonction booléenne Existe (T, K, CH) qui permet de vérifier l’existence d’une chaîne de caractères CH dans un tableau T contenant K chaînes de caractères.
c. D’écrire une fonction booléenne Format (CH) qui permet de vérifier si une chaîne de caractères CH est de la forme 192.168.72.Z (Z représente un nombre qui varie de 1 à 254).
d. D’écrire un module Play, qui s’exécute suite au clic sur le bouton "Vérifier", permettant :
- de récupérer la valeur du nombre N saisi, puis de s’assurer de sa validité comme décrit précédemment et d’afficher, le cas échéant, le message adéquat via le label dédié à l’affichage, comme illustré dans la figure Fig-2 et Fig-3,
- de récupérer les valeurs des adresses IP1 et IP2, puis de s’assurer :
de leurs validités, en utilisant la fonction Format, tout en affichant, le cas échéant, le message adéquat via le label dédié à l’affichage, comme illustré dans la figure Fig-4,
de leurs éventuelles communication, en utilisant les modules DHCP et Existe, tout en affichant le message adéquat via le label dédié à l’affichage, comme illustré dans les figures Fig-5 et Fig-6.
e. D’exploiter l’annexe présentée ci-après tout en apportant les modifications nécessaires à l’intégration de l’interface graphique InterfaceRéseau.

Pour créer une application en Python et Designer QT afin de concevoir une application, enrichie par une interface graphique, qui simule l’attribution d’adresses IP aux machines d’un réseau local par un serveur DHCP et vérifie si deux machines d’adresses données IP1 et IP2 font partie de ce réseau local, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLabel nommé 'affichage' pour afficher les messages générés par le programme
QLineEdit nommé 'n' pour entrer l'entier n.
QLineEdit nommé 'n' pour entrer l'entier n.
QLineEdit nommé 'ip1' pour entrer l'adresse IP1.
QLineEdit nommé 'ip2' pour entrer l'adresse IP2.
QPushButton nommé 'verifier_bt' pour exécuter le module Play()

Enregistrez le fichier avec l'extension .ui, par exemple InterfaceRéseau.ui.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# ========================================================= # IMPORTATION DES BIBLIOTHÈQUES # ========================================================= # Permet de charger une interface graphique créée avec Qt Designer from PyQt5.uic import loadUi # Permet de créer et gérer l’application PyQt5 from PyQt5.QtWidgets import QApplication # Bibliothèque utilisée pour manipuler les tableaux (array) from numpy import * # Bibliothèque utilisée pour générer des nombres aléatoires import random # ========================================================= # CRÉATION DU TABLEAU POUR STOCKER LES ADRESSES IP # ========================================================= # Tableau de 200 éléments destiné à stocker les adresses IP générées t = array([str] * 200) # ========================================================= # FONCTION : VÉRIFIER SI UNE ADRESSE IP EXISTE DÉJÀ # ========================================================= def existe(t, k, ch): # Initialisation de l’indice i = 0 # Recherche de l’adresse IP dans le tableau while t[i] != ch and i < k - 1: i = i + 1 # Retourne True si l’adresse existe, sinon False return t[i] == ch # ========================================================= # FONCTION : GÉNÉRATION DES ADRESSES IP DHCP # ========================================================= def dhcp(t, n): # Génération de la première adresse IP aléatoire t[0] = "192.168.72." + str(random.randint(1,154)) # Affichage de l’adresse IP dans la console print(t[0]) # Génération des autres adresses IP for i in range(1, n): # Création d’une nouvelle adresse IP aléatoire t[i] = "192.168.72." + str(random.randint(1,154)) # Vérification que l’adresse IP n’existe pas déjà while existe(t, i, t[i]) == True: # Génération d’une autre adresse IP t[i] = "192.168.72." + str(random.randint(1,154)) # Affichage de l’adresse IP générée print(t[i]) # ========================================================= # FONCTION : VÉRIFICATION DU FORMAT D’UNE ADRESSE IP # ========================================================= def Format(ch): # Vérifier que l’adresse commence par "192.168.72." # et qu’elle contient au moins un chiffre après le point if ch[0:11] == "192.168.72." and len(ch) >= 12: # Position du premier chiffre après 192.168.72. i = 11 # Vérifier que tous les caractères restants sont des chiffres while (i < len(ch) - 1) and ('0' <= ch[i] <= '9'): i = i + 1 # Vérification du dernier caractère if '0' <= ch[i] <= '9': # Vérifier que la partie finale est comprise entre 1 et 254 if 1 <= int(ch[11:len(ch)]) <= 254: return True else: return False else: return False else: return False # ========================================================= # FONCTION PRINCIPALE EXÉCUTÉE LORS DU CLIC SUR LE BOUTON # ========================================================= def play(): # Effacer l’ancien résultat affiché windows.affichage.clear() # Vérifier que l’utilisateur a saisi une valeur pour n if windows.n.text() != '': # Conversion de n en entier n = int(windows.n.text()) # Vérifier que n est compris entre 5 et 200 if (5 <= n <= 200): # Récupération des deux adresses IP saisies ip1 = windows.ip1.text() ip2 = windows.ip2.text() # Vérifier le format des deux adresses IP if Format(ip1) and Format(ip2): # Génération des adresses IP dhcp(t, n) # Vérifier si les deux adresses existent dans le réseau if (existe(t, n, ip1)) and (existe(t, n, ip2)): # Les deux machines peuvent communiquer windows.affichage.setText('Communication possible') else: # Au moins une adresse IP n’existe pas windows.affichage.setText('Communication impossible') else: # Message d’erreur si le format IP est incorrect windows.affichage.setText( 'Adresse IP doit être de la format: 192.168.72.Z' ) else: # Message d’erreur si n est hors intervalle windows.affichage.setText("n doit être entre 5 et 200") else: # Message d’erreur si le champ n est vide windows.affichage.setText("Veuillez saisir un nombre !") # ========================================================= # CRÉATION DE L’APPLICATION PYQT5 # ========================================================= # Création de l’application PyQt5 app = QApplication([]) # Chargement de l’interface graphique créée avec Qt Designer windows = loadUi("InterfaceRéseau.ui") # Affichage de la fenêtre principale windows.show() # Connexion du bouton "verifier" à la fonction play() windows.verifier_bt.clicked.connect(play) # Lancement de la boucle principale de l’application app.exec_() |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info