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.
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é.
Un squelette du programme demandé est fourni. Le programme doit s'appeler httpclient et doit accepter les arguments suivants sur la ligne de commande:
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:
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.
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)