next_inactive up previous


MINI PROJET 1

ECOLE POLYTECHNIQUE DE MONTREAL
Département de génie électrique
Section informatique
Cours INF4402: Systèmes répartis sur l'Internet (Hiver 2001)
3 crédits (3-1.5-4.5)

Objectifs

Ce projet vise à introduire l'étudiant au développement d'applications réparties client-serveur en utilisant les mécanismes de communication de base sous POSIX.

Description

La Toile (World Wide Web) permet à des utilisateurs externes d'obtenir copie de documents offerts sur divers serveurs. Pour ce travail, un programme client HTTP simple doit être programmé.

Réalisation

Un squelette du programme demandé est fourni. Le programme doit s'appeler httpclient et doit accepter les arguments suivants sur la ligne de commande:

-h host
Nom de l'ordinateur à accéder.

-p port
Numéro du port sur cet ordinateur (par défaut 80).

-n pathname
Nom du fichier à accéder.

Le répertoire contenant le travail de l'étudiant doit s'appeler tp1 et contenir un fichier makefile ainsi qu'un fichier index.html qui contient le rapport de l'étudiant et pointe vers le listage du programme.

Le programme httpclient doit permettre d'obtenir le fichier demandé, imprimer son contenu sur stdout, et imprimer son type, sa taille et le type du serveur (e.g. Apache version 0.0.1) sur stderr. La description complète du protocole HTTP peut être trouvée au World Wide Web Consortium (http://www.w3.org). Cependant, pour comprendre le sous-ensemble de HTTP requis pour transmettre un fichier, il suffit de produire une trace d'un client existant. Plus encore, cette trace permet de voir les appels systèmes effectués par le client:

bash> strace -o trace.dat -s 120 lynx -source http://m3.polymtl.ca/inf2500/
bash> less trace.dat
...
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
ioctl(4, FIONBIO, [1])            = 0
connect(4, {sin_family=AF_INET, sin_port=htons(80), 
  sin_addr=inet_addr("132.207.12.160")}, 16) = -1 EINPROGRESS
select(1024, NULL, [4], NULL, {0, 100000}) = 1 (out [4], left {0, 100000})
connect(4, {sin_family=AF_INET, sin_port=htons(80), 
  sin_addr=inet_addr("132.207.12.160")}, 16) = 0
ioctl(4, FIONBIO, [0])            = 0
write(4, "GET /inf2500/index.html HTTP/1.0\r\nHost: m3.polymtl.ca\r\n
  Accept: text/html, text/plain, application/x-cat, 
  application/x-u"..., 790) = 790
time(NULL) = 947190171
select(1024, [4], NULL, NULL, {0, 100000}) = 1 (in [4], left {0, 100000})
read(4, "HTTP/1.1 200 OK\r\nDate: Thu, 06 Jan 2000 20:22:51 GMT\r\n
  Server: Apache/1.3.9 (Unix)  (Red Hat/Linux)\r\n
  Last-Modified: Thu, "..., 1535) = 1535
...

Il est aussi possible d'établir une connexion manuellement avec le serveur afin d'expérimenter:

bash> telnet m3.polymtl.ca 80
Trying 132.207.12.160...
Connected to cassis.info.polymtl.ca.
Escape character is '^ ]'.
GET /inf2500/ HTTP/1.0

HTTP/1.1 200 OK
Date: Thu, 06 Jan 2000 20:40:54 GMT
Server: Apache/1.3.9 (Unix) (Red Hat/Linux)
Last-Modified: Thu, 06 Jan 2000 15:12:04 GMT
ETag: "1b116-55f-3874b0c4"
...
<HTML>
<HEAD>
<title>Cours INF2500: Architectures d'ordinateur</title>
</HEAD>

Un canevas pour votre rapport est fourni dans le fichier tp1/index.html. Il pointe vers le fichier source du programme, et vers le canevas utilisé par le correcteur pour annoter votre travail. Le rapport sera ainsi soumis sous forme électronique en même temps que votre programme. Les fichiers objets doivent être enlevés avant la soumission électronique.

Evaluation

Le barème suivant sera appliqué au rapport du mini projet 1. Chacune des rubriques citées doit apparaître dans le rapport. Un rapport bref et concis est un atout. Le rapport doit être écrit en bon français et être remis avant la date et l'heure prévus à l'horaire (les pénalités habituelles s'appliquent).

Le professeur: Michel Dagenais (A-306.18, tel. 340-4711 etx.4029)


next_inactive up previous
Copyright Michel Dagenais, [email protected], ven jan 12 10:26:28 EST 2001