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.