Utilisation des protocoles TCP/IP
Article paru dans le magazine Login numéro 91
Reproduction interdite. Tous droits réservés à Posse Press et Olivier Auverlot
Rebol est un excellent langage pour la programmation réseau. Sans qu'aucune extension ne soit nécessaire, l'évaluateur Rebol est capable d'utiliser les principaux protocoles de TCP/IP. Il est également possible de définir ses propres protocoles réseaux. Il est ainsi possible de concevoir un client ou un serveur pour un protocole existant mais aussi d'en définir un nouveau, adapté à vos besoins.
Les protocoles disponibles dans Rebol
Toutes les versions de Rebol peuvent utiliser dix des principaux protocoles de TCP/IP. HTTP (Hypertext Transport Protocol) permet de lire les documents présents sur le web. Grâce à lui, vous pouvez récupérer des documents HTML, des images, des documents multimédia mais également déclencher l'exécution de scripts CGI sur un serveur distant. FTP (File Transfert Protocol) autorise la récupération ou l'envoi de fichiers sur une autre machine que la votre. La gestion du courrier électronique est autorisée par le support des protocoles SMTP pour l'envoi des messages (Simple Mail Transport Protocol) et des protocoles IMAP (Internet Message Access Protocol) et POP3 (Post Office Protocol) pour la lecture du courrier. L'accès aux News sur Internet est assuré par le protocole NNTP (Network News Transmission Protocol). Il existe également des protocoles permettant de récolter des informations. Il est ainsi possible d'interroger le serveur de nom d'un domaine (DNS) afin de connaître l'adresse IP d'une machine selon son nom et inversement. Les "petits" protocoles que sont FINGER, WHOIS et DAYTIME permettent respectivement d'obtenir des informations sur le compte d'un utilisateur, de rassembler des informations sur un nom de domaine et de connaître l'heure et la date d'une machine.
Configuration réseau
Avant de faire quoi que ce soit au niveau du réseau avec Rebol, vous devez d'abord vous assurer que votre évaluateur Rebol est correctement configuré. Dans le cas contraire, il y a bien peu de chances que vous puissiez accéder aux ressources du Web ou consulter une boîte aux lettres électronique. Si vous n'avez pas indiqué à Rebol vos paramètres réseau lors de son installation, vous devez utiliser le mot SET-NET qui reçoit en paramètre un bloc contenant six valeurs. Vous devez placer dans cette liste :
Un proxy est une machine permettant à ses clients de se connecter à Internet. C'est d'une certaine façon la porte de sortie et un passage obligé pour vos requêtes HTTP lorsque vous êtes sur le réseau au travers d'un fournisseur d'accès. Si un paramètre n'est pas renseigné, il peut être remplacé par la valeur NONE.
set-net [
olivier.auverlot@domaine.fr
smtp.domaine.fr
pop3.domaine.fr
proxy.domaine.fr
8080
generic
]
Rebol supporte quatre types différents de proxy :
Envoyer et recevoir des emails
Vous pouvez maintenant envoyer et recevoir des messages électroniques. Pour cela, il suffit d'utiliser les mots SEND et READ. Envoyons un petit message sur une boîte aux lettres :
send olivier.auverlot@domaine.fr "coucou je suis un message"
Si le corps du message contient des retours à la ligne, vous devez entourer la chaîne de caractères à l'aide de "{" et "}" qui indiquent une chaîne multi-lignes :
send olivier.auverlot@domaine.fr {
Coucou
Je suis un message
}
A l'aide du raffinement HEADER, vous pouvez ajouter des informations telles qu'un sujet. Le paramètre supplémentaire est un objet dont les différentes propriétés correspondent aux nombreux champs d'informations d'un email :
entete: make system/standard/email [
Subject: "sujet du message"
]
send/header olivier.auverlot@domaine.fr "hello"
Pour lire vos messages, vous pouvez utiliser le mot READ suivi d'une URL contenant le protocole (POP3 ou IMAP), votre compte de messagerie, votre mot de passe et le nom du serveur de messagerie interrogé :
print read pop://olivier:homer@pop3.domaine.fr
Chaque message est reçu sous la forme d'une chaîne de caractères multi-lignes qui est placée dans une liste. Il existe de nombreuses possibilités avec Rebol afin de gérer l'envoi et la réception de courriers électroniques. Toute application peut très rapidement devenir communicante et échanger des messages avec des personnes (alertes, rapports automatiques, …) ou d'autres applications.
Accéder aux ressources du Web
A l'aide des protocoles HTTP et FTP, vous pouvez lire et envoyer des documents sur un réseau. Rebol peut ainsi se faire passer pour un navigateur et récupérer des fichiers au format HTML ou XML. Cette possibilité facilite la construction d'agents destinés à la recherche et à la récolte d'informations. En fait, il suffit simplement de lire une ressource sur le réseau en spécifiant l'URL permettant d'y accéder. L'exemple qui suit affiche à l'écran le contenu de la page d'accueil du site de la société Rebol :
print read http://www.rebol.com
En affectant le résultat de la requête à une chaîne de caractères à l'aide du mot COPY, vous pouvez réaliser des opérations de recherche et d'extraction d'informations. Avec LOAD/MARKUP, la lecture du fichier est suivie d'une analyse de celui-ci par l'évaluateur Rebol. Vous obtenez alors un bloc composé de balises HTML ou XML (TAG!) et de chaînes de caractères.
Avec FTP, vous pouvez récupérer des fichiers mais également en envoyer. Les deux mots utilisés sont READ et WRITE. L'URL passée en paramètre contient le compte utilisateur et le mot de passe nécessaire à la connexion. Avec Rebol, les opérations nécessaires pour manipuler un fichier distant sont les mêmes que pour un fichier local. Dans l'exemple qui suit, vous récupérez un fichier nommé rapport.txt sur un serveur FTP qui est ensuite affiché à l'écran :
print read ftp://olivier:passwd@ftp.domaine.fr/docs/rapport.txt
Et les autres protocoles ?Avec Rebol, tout fonctionne sur le même modèle, il n'y a pas de cas particuliers ou d'exceptions contrariantes. L'ensemble des protocoles s'appuie sur une seule et même syntaxe qui rend très intuitif leur usage. Supposez que vous vouliez connaître l'adresse IP d'une machine. Il vous suffit de faire :
adresse-ip: read dns://serveurweb
Un autre exemple ? Vous voulez connaître l'heure et la date d'un serveur sur votre réseau. La syntaxe est évidente :
print read daytime://monserveur
Clients et serveur
S'il y a un domaine où Rebol est vraiment impressionnant, c'est probablement sa facilité à mettre en place des applications communicantes basées sur des ports de type TCP ou UDP. Pour écrire un client, c'est à dire un programme envoyant des données à un processus serveur et attendant une réponse, il suffit d'ouvrir une socket (la combinaison d'une adresse IP et d'un port). Dans un second temps, vous pouvez insérer dans celle-ci les informations transmises au serveur et lire ensuite la réponse. La dernière étape consiste à refermer la socket afin de la libérer.
REBOL [
Subject: "client TCP"
]
; le script ouvre une connexion vers la machine 172.29.143.1
; sur le port 8000/tcp
p: open tcp://172.29.143.1:8000
; une requête (terminée par un retour à la ligne) est envoyée
insert p "hello^/"
; la réponse est affectée à une variable
reponse: copy ""
read-io p reponse 255
print reponse
close p
L'écriture d'un serveur ne pose vraiment aucun problème. Il suffit d'ouvrir un port en écoute et d'attendre que des données soient reçues. On détermine ensuite un port de communication, on effectue le traitement et la réponse est retournée au client.
REBOL [
Subject: "serveur TCP"
]
; ouverture du port
p: open tcp://:8000
; le serveur entre dans une boucle infinie
forever [
wait p
; une connexion est détectée
conn: first p
; lecture de la requete
requete: copy ""
read-io conn requete 255
print [ "requete ->" requete ]
; envoi de la réponse
insert conn "OK^/"
; fermeture de la connexion avec le client
close conn
]
La prochaine fois
Dans le prochain numéro, nous allons partir à la découverte de Rebol/View. Ce produit est totalement compatible avec le Core mais dispose de la possibilité de construire des interfaces graphiques multi-plateformes. Nos scripts Rebol vont considérablement améliorer leur look !
Olivier Auverlot