Le serveur que je vous propose ici sera capable d'accepter une connection sur le port 23 provenant d'une personne distante. Une restriction cependant: il ne pourra pas accepter plus d'un client.

Commençons par le plus simple: définissons un popup "Commands" à telle fin qu'on va pouvoir démarrer le serveur ou l'arrêter. Entrer les lignes suivantes dans le remote:
menu menubar {
Ouvrir le serveur: { socklisten serveurTelnet 23 | window -e @Serveur | titlebar @Serveur Telnet sur 23 }
Fermer le serveur: sockclose serveurTelnet | sockclose JumeauTelnet
}
A noter que la fonction titlebar permet de mettre un titre avec des espaces à votre fenêtre utilisateur, le premier mot du titre étant toujours le nom de la fenêtre.

Le socket JumeauTelnet n'est pas encore défini: vous l'avez compris, il s'agit du socket jumeau qui va être créé pour établir la communication avec le client.

Dans les lignes suivantes, tapez alors:
on 1:socklisten:serveurTelnet:{ 
sockaccept JumeauTelnet 
aline -ph 4 @Serveur Connexion de $sock(JumeauTelnet).ip 
}

on 1:sockclose:JumeauTelnet: aline -ph 4 @Serveur Déconnexion de $sock(JumeauTelnet).ip

on 1:sockread:JumeauTelnet: { 
if ( $sockerr == 0 ) { sockread %temp 
  if ( %temp != $null ) aline -ph 1 @Serveur %temp }
}
Analysons. La 1re ligne on .. socklisten réagit lorsqu'un client se connecte a votre serveur. On crée alors un socket jumeau du client, puis on affiche l'ip de la connexion client en rouge (je rappelle que $sock(..).ip contient toujours l'ip du socket distant).

La seconde ligne on ... sockclose réagit quand le client se déconnecte. Vous en serez alors informé. Lorsque la connexion est close, un autre client pourra se connecter.

La troisième ligne intercepte l'événement de lecture du socket: cet événement a lieu lorsque le client écrit sur le socket (donc écrit dans la fenêtre de son client telnet). La ligne écrite par votre client apparaît en noir dans la fenêtre @serveur.

Comme il peut être intéressant de répondre à ce client, nous allons intercepter un événement particulier qui a lieu lorsque vous, vous écrivez dans la fenêtre. Cet événement est l'événement ON ... INPUT (voir chapitre précédent sur les événements).

Le code à taper sera le suivant:
on 1:input:@Serveur:{ 
if ( $sock(JumeauTelnet).name != $null ) { aline -ph 2 @Serveur $1- | sockwrite -n JumeauTelnet $1- }
  else aline -ph 4 @Serveur Personne n'est connecté!!
halt 
}
Lorsque vous tapez un message dans la zone de saisie de la fenêtre @Serveur et qu'un client est connecté, vous écrivez la ligne en bleu sur la fenêtre et en même temps vous écrivez sur le socket JumeauTelnet. Le client verra donc la ligne que vous avez tapé.

Dans le cas où aucun client n'est connecté, (cela se teste en vérifiant que $sock(..).name n'est pas la chaîne vide par exemple) vous avez un message comme quoi personne n'est connecté (en rouge, couleur 4).

Notre serveur de Telnet est presque fini, il reste encore à gérer l'événement où vous même fermez la fenêtre serveur, ce qui doit se traduire par la fermeture de la connexion ainsi que par la fermeture du serveur:
on 1:close:@Serveur:sockclose serveurTelnet | sockclose JumeauTelnet


Précédent: Les sockets serveur   Suivant: Les tokens   Début de page   Sommaire