Loading s7crs_l09_http_server...
{A} du programme fourni, vous créerez la
socket d'écoute TCP associée au port choisi en ligne de commande.{B-1} du programme fourni, nous recevons ligne
par ligne l'en-tête de la requête HTTP en s'arrêtant à la ligne vide qui
en marque la fin.{B-2} nous préparons le document qui constituera
le contenu de la réponse ; il n'est pas du tout question ici de
protocole HTTP mais juste d'un message en HTML lisible par l'utilisateur
du navigateur (ce n'est qu'un exemple similaire à ce que nous avons
utilisé lors de l'expérimentation préparatoire avec la commande ncat).
Maintenant que le contenu de la réponse est connu, nous pouvons préparer
un en-tête HTTP qui annoncera notre réponse au client.{B-2} du programme fourni est consacré à cet en-tête de
réponse."\r\n"plutôt que simplement
"\n"au cas où un tel client fonctionnerait sous Windows (ce système code les fins de ligne avec ces deux caractères).
{C-1} du programme fourni, nous vérifions que la
ressource réclamée désigne bien un fichier accessible ; il est donc
envisageable d'en transférer le contenu vers le client.{C-1} pour rédiger et envoyer
un en-tête de réponse HTTP.{C-2} afin de recopier
le contenu du fichier désigné vers la connexion TCP.
En l'état, vous obtenez un serveur HTTP très simple permettant de délivrer
des documents préalablement préparés dans des fichiers.{D} du programme fourni, nous traitons ce cas.
Il s'agit à nouveau de produire une page HTML lisible par l'utilisateur afin
de lui offrir des liens vers les éléments du répertoire en question.
La démarche est très semblable à celle qui consistait à fournir un message
d'erreur et doit être complétée par le point {D} qui produit et
envoie l'en-tête de réponse HTTP annonçant ce contenu qui sera envoyé à
la suite.
Testez votre serveur depuis votre navigateur afin de constater le bon
comportement de cette fonctionnalité.{E-1} extrait et affiche la chaîne de caractères fournie par
le client.{E-2} est, somme toute, très similaire à ce
que nous avons réalisé jusqu'alors ; nous nous contentons simplement
de préciser que nous renvoyons du texte brut.
De la même façon, nous traiterons le cas de requêtes POST /bin afin
d'obtenir des données binaires en provenance du client.{E-3} extrait les octets attendus et suppose qu'ils constituent
un tableau d'entiers ; bien entendu ceci est un choix applicatif ici et
ces données binaires pourraient tout aussi bien avoir une toute autre
signification.{E-4} est une nouvelle fois très
similaire à ce que nous avons déjà réalisé ; nous nous contentons
simplement de préciser que nous renvoyons des données brutes.
Désormais, le lien HTTP application de la page principale de notre
serveur doit faire apparaître dans le navigateur une application simpliste
qui envoie un message textuel au serveur lors de son démarrage et des
messages textuels ou binaires selon l'usage des boutons qu'il propose.{F-1} afin de confirmer au client le fait que ce changement de
protocole aura bien lieu.
Puisque avec les websockets chaque nouvelle information transmise peut à
tout moment provenir du client ou du serveur, nous explorons cette
possibilité dans notre application simpliste.{F-2}, crs::select() vient de nous
promettre que la prochaine opération de réception sur la socket de
dialogue ne sera pas bloquante.{F-3}.{F-4}, nous interprétons les octets
obtenus comme un tableau d'entiers de 32 bits reçus en respectant
l'ordre des octets du réseau.{F-5} et {F-6} traitent de messages spéciaux qui
permettent de tester la connectivité et de réclamer la fin au dialogue.
Après avoir réagi à d'éventuels messages websocket reçus, les points
{F-7} et {F-8} permettent au serveur d'envoyer spontanément
des informations au client (sans que celui-ci ne le demande
préalablement).{F-?} du code correctement complétés, il
devient possible d'exploiter le lien WebSocket application de la
page principale de notre serveur.{G-1} de notre programme
doit commencer par rédiger et envoyer le début de l'en-tête de réponse
HTTP.{G-2} du programme fourni revient à
utiliser un processus enfant afin que celui-ci opère des redirections
d'entrées/sorties sur la connexion TCP avant d'être recouvert par le
programme choisi.