TD 5

Vendredi 14 février 2003

1  Un client tcp

On désire écrire un commande mon_wget qui prend en argument un nom de machine m, un numéro de port p, un chemin d'accès c et qui affiche, sur la sortie standard, le résultat de la requête HTTP vers l'url http://m:p/c.

On rappelle le format d'une requête HTTP/0.9 est : "GET /c\r\n"

On commence par écrire quelques fonctions utilitaires.

Écrire une fonction open_connection qui prend en argument l'adresse de type inet_addr et le numéro de port d'un serveur et qui retourne le descripteur d'une prise connectée au serveur.
(corrigé)
Écrire une fonction inet_addr_of_name qui retourne une adresse de type inet_addr à partir d'un nom de machine ou d'un numéro IP passé sous forme de chaîne de caractères.
(corrigé)
Écrire une fonction port_of_string qui retourne un numéro de port à partir d'un nom de service ou d'un entier passés sous forme de chaîne de caractères.
(corrigé)
Écrire une fonction pour le client et une fonction principale qui gère les arguments passé sur la ligne de commande.
(corrigé)

2  Un serveur tcp

Écrire un commande uppercase_server qui accepte une connexion tcp sur un port p passé en argument, lit les caractères reçus sur cette connexion et les renvoie après les avoir mis en majuscule, jusqu'à ce que la connexion soit fermée, puis se remet en attente de connexion.

Pour tester votre commande utilisez telnet localhost p.

On commence par écrire quelques fonctions utilitaires.

Écrire une fonction open_server qui prend en argument un numéro de port et qui retourne le descripteur d'une prise serveur attachée localement sur ce port.
(corrigé)
Écrire une fonction establish_iterative_server qui prend en argument une fonction et un numéro de port et qui lance un serveur en attente sur ce port. À chaque connexion, la fonction est appelée avec le descripteur de la connexion passé en argument.
(corrigé)
Écrire le serveur.
(corrigé)
Écrire une fonction establish_concurrent_server qui prend en argument une fonction et un numéro de port, et qui lance un serveur en attente sur le port. À chaque connexion, la fonction est appelée dans un nouveau processus avec le descripteur correspondant à la connexion passé en argument.
(corrigé)

3  Un multiplexeur de serveurs tcp

Écrire une fonction inetd qui prend en argument une liste de couples (port,cmd_argv) et qui attend les connexions TCP sur n'importe lequel des ports de la liste.

À chaque connexion sur un port p, la fonction accepte la connexion puis exécute, dans un nouveau processus, la commande cmd_argv associée à p en redirigeant l'entrée standard, la sortie standard et la sortie d'erreur vers la connexion.
(corrigé)

4  Un cat en tcp

Écrire une commande mon_netcat qui prend en argument un nom de machine m, un numéro de port p et qui se connecte sur le port p de la machine m, puis recopie, ligne à ligne, tout ce qui est lu sur l'entrée standard sur la connexion et tout ce qui est lu sur la connexion sur sa sortie standard. Pour cette commande on utilisera un seul processus.

La commande termine lorsque la connexion est fermée.
(corrigé)





This document was translated from LATEX by HEVEA and HACHA.