Serveur web
Ph.Leroy
2015-05-01
La mise en œuvre d'un serveur ethernet avec le protocole TCP/IP à partir de Sisal est très simple. Ce serveur permet de communiquer avec tout autre script Sisal mais aussi tout autre programme de tout autre machine capable d'établir une connexion ethernet TCP/IP.
Le serveur Tcp
Le serveur de connexion ethernet est par définition le programme qui est en attente de connexion sur un port donné, par exemple un serveur http attend sur le port 80, par défaut le protocole Sisal utilise le port 1550 (pourquoi pas celui-là ).
Grosso-modo les ports inférieurs à 2048 sont réservés à des applications biens connues (FTP, HTTP, NNTP, ...) mais on dispose de tout le reste jusqu'à 32767.
Par exemple ici on crée un serveur nommé Tcps à l'écoute sur le port 8192 avec six connexions simultanées au maximum.
Object Tcps TcpServer, 8192, 6; // port 8192 and 6 connections simultaneaously
Lorsqu'un client essaye de se connecter, le serveur Tcps lève un événement Connect et met à jour la liste de connexions en attente Connected. Le serveur accepte ou refuse chaque connexion avec la fonction Accept.
On Tcps.Connect do for tcp in Tcps.Connected do Tcps.Accept( tcp, 1); // Accept every connection
Une fois la connexion acceptée, chaque fois qu'un ou plusieurs clients envoient une trame le serveur Tcps lève un événement et une liste de réception.
Ici chaque fois qu'un client demande l'heure ( mot-clé TIME), le serveur lui renvoie l'heure courante.
On Tcps.Receive do for tcp in tcps.received do begin Tcps.Get( tcp, trame); if trame == "TIME" then Tcps.Send( tcp, Now()); end
Une fois qu'un client en a fini il se déconnecte ; le serveur Tcps lève alors un événement de déconnexion et une liste de déconnexion.
On Tcps.Disconnect do for tcp in Tcps.Disconnected do Tcps.Close( tcp);
Le client Tcp
Du coté du client c'est encore plus simple; chaque fois qu'un client a besoin de communiquer avec un serveur qu'il soit Sisal ou autre il doit déclarer un objet TcpClient précisant l'adresse Tcp/Ip du serveur et le port de connexion.
Clt TcpClient, "localhost", 8192, 60; // Server name, port and delay for automatic reconnect
Et par exemple toutes les dix secondes on va demander l'heure au serveur.
On Horloge.ToutesLesDixSecondes do if Clt.Status() == 1 then Clt.Send( "TIME");
et chaque fois que l'on reà§oit une réponse du serveur on a un événement Receive.
On Clt.Receive do Clt.Get( Trame);
Voila c'est tout.