Corrigé TP Noté 2013 : serveur HTTP
3. Modification du Worker Httpd10WorkerBase.java
- Httpd10Worker.java
-
- on ouvre le fichier en lecture, et on obtient le channel permettant de la manipuler ;
- on met le buffer qui permet de lire dans le fichier et d'écrire sur le canal tcp dans l'état qui permet de le remplir (clear)
- on remplit le buffer à partir du fichier (read)
- on prépare le buffer pour émettre son contenu sur le canal tcp (flip)
- on transmet le contenu du buffer sur le canal tcp (write)
- on ferme le channel correspondant au fichier ouvert ainsi que son FileInputStream
4. Modification du serveur Httpd10Base
- Httpd10.java
-
-
Un
ServerSocketChannel
permet à un serveur d'être contacté par un client. Il correspond à un port que le client doit connaître et auquel il doit
se connecter. Un SocketChannel
permet d'accéder au canal tcp ouvert et d'échanger des données de manière bidirectionnelle entre les deux cotés de ce canal TCP.
-
L'opération accept peut être faite sur un
ServerSocketChannel
et pas sur un SocketChannel
.
-
Les opérations read et write peuvent être faites sur un
SocketChannel
et pas sur un ServeurSocketChannel
.
6. Autres questions sur le serveur Httpd10 réalisé
Une fois que vous avez testé le serveur réalisé à la section
précédente, répondez aux questions suivantes :
-
Ce serveur peut-il être utilisé par plusieurs clients ?
Oui il peut être utilisé par plusieurs clients mais de manière séquentielle dans le temps.
-
Il accepte la connexion, crée un Worker qui décode la requête et répond en
transmettant le contenu du fichier correspondant à la requête. Le Worker, ferme
la connexion.
-
Le fichier contient un feuille de style et trois images. Un browser devra
réaliser cinq connexions pour charger la page.
7. Maintien des connexions ouvertes (5 pts)
Répondez aux questions suivantes puis réalisez les modifications au
niveau des classes :
-
Il faut permettre que plusieurs worker soient lancés en même temps, chacun
étant dans un Thread.
-
Il faut que la classe implémente l'interface
Runnable
, et que le travail soit réalisé une méthode appelée run
-
Le serveur doit créer le worker, puis lancer le
Thread
correspondant.
Http11Worker.java
Httpd11.java