Créer un serveur de base tout protocole

Contenu du snippet

Voici un petit addon, permettant d'ouvrir et d'écouter un port, d'y accepter les connexions entrantes sur ce port, puis d'afficher les données envoyées par le client sur ce port.
C'est une bonne base pour apprendre à faire des serveurs. (tout protocole confondu)

J'ai biensûr commenté le code.

Source / Exemple :


dialog serveur {
  title "Serveur By Sorn_Drixer"
  size -1 -1 200 158
  option dbu
  edit "", 1, 28 5 50 10, limit 5
  text "Port :", 2, 9 6 16 8
  button "&Lancer", 3, 81 6 37 9
  edit "", 4, 8 24 183 51, read multi return autovs vsbar
  box "Requêtes", 5, 5 17 191 73
  box "", 6, 5 90 191 24
  edit "", 7, 9 99 125 10, autohs
  button "&Envoyer requete", 8, 139 99 49 9
  button "&Clear", 9, 8 77 33 9
  box "", 10, 5 114 191 21
  text "Etat du serveur :", 11, 9 121 42 8, disable
  text "OFF", 12, 56 121 12 8
  button "&Arrêter", 13, 122 6 37 9
  box "", 14, 5 135 191 18
  text "Status :", 15, 9 141 25 8, disable
  text "...", 16, 38 141 153 8
}

menu * {
  Mon Serveur:/server
}

ON *:DIALOG:serveur:*:*:{
;on vérifie si le socket monserveur est ouvert si c'est le cas on affiche ON dans l'id 12
  if $devent == init { if $sock(monserveur,0) == 1 { did -ra $dname 12 ON } }
  if $devent == sclick {
;on ouvre le serveur
    if $did == 3 && $did(1) { run.server $did(1) }
;si le socket monserveur est ouvert et si l'id 7 n'est pas null (vide)
;on envoie à tout les sockets commencant par theclient se qu'il y a dans l'id 7
    if $did == 8 && $sock(monserveur,0) == 1 && $did(7) { sockwrite -n theclient* $did(7) | did -ra $dname 16 Donnée envoyée }
;on efface se qu'il y a dans l'id 4
    if $did == 9 { did -r $dname 4 }
;si le socket monserveur est ouvert on le ferme
;on affiche OFF dans l'id 12
;on affiche Serveur arreté avec succès dans l'id 16
    if $did == 13 { if $sock(monserveur,0) == 1 { sockclose monserveur | did -ra $dname 12 OFF | did -ra $dname 16 Serveur arrêté avec succès } }
  }
}

;alias permettant d'ouvrir le dialog serveur
alias -l server { if !$dialog(serveur) { dialog -md serveur serveur } }
;alias permettant de mettre un port en écoute sur le socket monserveur
;on vérifie d'abord si le port précisé est libre avec $portfree
alias -l run.server { if $1 && $portfree($1) { socklisten monserveur $1 | did -ra serveur 12 ON | did -ra serveur 16 Serveur en écoute } | else did -ra serveur 16 Le port $1 est déjà ouvert }
;on accepte les connections entrantes et on les nomme theclient suivant d'un nombre aléatoire
on *:SOCKLISTEN:monserveur:sockaccept theclient $+ $rand(0,9999)
;on écoute les données
;on les sépare en token ($1,$2 etc) puis si le dialog serveur est ouvert on affiche les données dans l'id 4
;suivit d'un retour de chariot : $CRLF pour que la prochaine donnée soit bien à la ligne
on *:SOCKREAD:theclient*:/sockread %01 | tokenize 32 %01 | if $dialog(serveur) { if $1- { did -a serveur 4 $1- $CRLF } }

Conclusion :


Voila, code à mettre dans les remotes de mIRC (ALT + R)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.