N.B. Niveau : Terminale S, enseignement de spécialité ISN (Informatique et Sciences du Numérique)
Ce cours a été testé sous Windows et GNU/Linux avec Python version 2.7
Les applications et jeux en réseau se basent sur le modèle clients/serveur.
Au niveau de la programmation, la tâche est ardue car il faut avoir des connaissances en réseau (module socket
) et en multithreading (module threading
) :
Un socket
permet de connecter deux machines à travers un réseau.
Ainsi, pour un jeu en réseau avec 10 joueurs (soit 10 clients et 1
serveur), il faut créer 10 sockets (chaque client est connecté au
serveur).
Dans le cas du réseau Internet, les sockets se servent du protocole IP
(couche réseau) et du protocole TCP pour la couche transport (il existe
aussi le protocole UDP qui est plus simple, plus rapide mais non
fiable).
Le multithreading
est une technique qui permet d'exécuter plusieurs tâches (thread
) en même temps et de manière indépendante dans un même processus.
Pour un jeu en réseau avec 10 joueurs, le serveur utilisera 10 threads pour communiquer individuellement avec chaque client.
Chaque thread gère donc le socket du client.
On retrouve le multithreading du côté de l'application cliente : pour
traiter l'émission et la réception en parallèle, on utilise un thread
pour parler au serveur, et un autre pour écouter le serveur.
Il s'agit d'un jeu multijoueurs.
On peut y jouer en réseau local (LAN) ou sur Internet.
Chaque joueur lance son application cliente pour se connecter au serveur.
La première étape consiste à créer un pseudonyme, puis quand le nombre
de joueurs est suffisant (3 dans l'exemple ci-dessous), la partie
commence.
Le serveur envoie alors simultanément la première question à
l'ensemble des joueurs : le but est d'y répondre correctement et le plus
rapidement possible.
Quand tout le monde a répondu ou si la limite de temps est dépassée, on passe à la question suivante...
Un classement est établi à partir d'un système de points.
Avant toute chose, il faut lancer le serveur.
Le port par défaut est 50026 et le nombre de joueurs est 3.
Mais on peut choisir pour le numéro de port une valeur arbitraire
comprise entre 49152 et 65535, ainsi qu'un nombre quelconque de joueurs :
il suffit de modifier ces paramètres dans le script.
Ici, on joue à trois en réseau local (chez vous, derrière votre box, par exemple).
Pour se connecter au serveur, il faut connaître son adresse IP (192.168.1.10) et le port qu'il utilise (50026).
Python étant multiplateforme, on peut mélanger les systèmes d'exploitation : Windows, Linux, Mac...
Dans cet exemple :
Finalement, c'est Ubuntu qui gagne devant Windows...
Cette application fonctionne mais est loin d'être parfaite : les pertes de connexion ne sont pas gérées, etc...
Si vous avez testé cette application, cela m'intéresse d'avoir un retour de votre part.
Le cours de Gérard Swinnen, avec deux exemples concrets à essayer (un chat et un jeu de bombardes) :
La documentation officielle de Python 2.7 :
Le livre de Brandon Rhodes et John Goerzen :
Contenu sous licence CC BY-NC-SA 3.0
Fabrice Sincère ; version 1.3.5.29
Modifié et adapté par Pascal Hassenforder 15/12/2013