Le Coin Wiki
d'Olivier Dalle
$WikiTagline
 

Sujet du projet de Systeme d’Exploitation (2010–2011)

On this page… (hide)

  1. 1. Modalites de remise
  2. 2. Question 1
  3. 3. Question 2
  4. 4. Question 3

Le but du projet est de construire une application de type chat basee sur la bibliotheque curses.

Curses est une bibliotheque assez difficile a maitriser, mais vous n’aurez pas, en principe, a vous plonger dans sa programmation: etudiez simplement le fichier window.py, vous trouverez facilement comment l’utiliser afin de construire votre application.

Attention rappelez-vous que python est un langage objet qui supporte l’hritage, pensez vous en servir au lieu de modifier le code fourni.

Le projet comporte trois questions de difficult croissante. Vous devrez remettre un programme en rponse chaque question: le fait de remettre un programme pour une question difficile ne vous dispense pas de la question facile qui prcde.

1.  Modalites de remise

Vous pouvez faire le projet seul ou a au 2 maximum. AUCUN trinome ne sera accepte.

Vous devrez creer un archive .zip contenant un repertoire nomme Projet-NOM ou Projet-NOM1-NOM2 selon que vous etes en monome ou binome. (Evidemment, remplacez NOM par votre nom!!)

Dans cette archive, vous placerez 1 fichier python nomme QuestionN.py pour la reponse a la question N. Vous pouvez aussi ajouter des fichiers supplementaires. Pensez aussi a ajouter le fichier window.py fourni, pour que votre programme fonctionne sans que j’ai besoin de changer quoi que ce soit.

Vous pouvez ajouter un (petit) fichier texte de type README pour explique les eventuelles astuces que vous avez trouve. Attention, n’abusez pas des “truc tordus”, j’aurai tendance a sanctionner ce que je ne comprends pas.

DATE DE REMISE: Lundi 2 Mai dernier delai, non negociable

Une boite de dpt a t ouverte sur ENT/J@lon. Aucun envoi par mail ne sera accept.

ATTENTION: le projet est realiser sur une machine linux (ou macos).

Bon projet!

2.  Question 1

Testez d’abord le module window fourni et essayez de comprendre comment il fonctionne et comment il pourra vous servir. Ce module contient a la fin, dans la section d’auto-test, une instruction commentee. Decommentez-la et observez ce qui se passe: vous devriez voir une seconde fenetre apparaitre.

Utilisez des tubes nomms unix (commande mkfifo) pour permettre ces deux programmes de communiquer. Vous ferez en sorte que chacun affiche un prompt diffrent selon qu’il affiche un message saisi dans sa propre fenetre de terminal ou dans l’autre terminal:

local: bla bla
remote: khjklklj
....

3.  Question 2

La solution prcdente fonctionne bien avec deux interlocuteurs, mais devient vite complique a plus que 2. Transformez (eventuellement) le programme initial window en application en client-serveur: faites en sorte que la fenetre de chat soit le client et utilise des tubes pour envoyer les messages vers un serveur au lieu d’un autre chat directement. Puis ecrivez le programme serveur: chaque fois qu’il recoit un message sur un tube en provenance d’un client chat, il doit le retransmettre aux autres clients. Evidemment vous pouvez transmettre des informations supplmentaires, par exemple afin d’identifier le client qui “parle”. Dans cette version vous ferez un serveur qui est prevu pour communiquer avec un nombre fix de client et de tuibes. Pensez utiliser la primitive select.select pour surveiller tous les tubes en mme temps.

4.  Question 3

Faites une nouvelle version client-serveur, mais cette fois utilisant les sockets et le protocole TCP. Rendez votre application dynamique, c’est--dire capable d’accepter les connexions de client au fur et mesure. Grez aussi la terminaison, par exemple en affichant un message pour signaler la deconnexions aux autres clients.

Indication: vous pouvez faire en sorte que le client se connecte a un serveur qui se trouve sur la meme machine en utilisant l’adresse localhost (127.0.0.1). Pensez aussi a utiliser la commande telnet pour tester le client sans le serveur ou vice-versa. Exempple:

telnet localhost 2526

permet de se connecter au serveur qui tourne sur la machine locale sur le port 2526.