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