Créer un serveur de base tout protocole

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 398 fois - Téléchargée 24 fois

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

Ajouter un commentaire Commentaires
Messages postés
33
Date d'inscription
lundi 8 août 2005
Statut
Membre
Dernière intervention
13 décembre 2005

ok :)
Messages postés
2084
Date d'inscription
jeudi 12 décembre 2002
Statut
Modérateur
Dernière intervention
30 janvier 2011
8
Cela signifie que la commande /sockwrite n'a trouvé aucun socket ayant un nom commencant par theclient (le message est pourtant explicite non ?)

Le but de mon addon n'est pas vraiment de l'utiliser, mais plutôt de comprendre son fonctionnement, et de se servir de mon code pour base d'un vrai serveur. (A partir de ce code, en le complétant, tu peux par exemple faire un serveur IRC, HTTP, etc, mais il y a du boulot pour réaliser ca)
Messages postés
33
Date d'inscription
lundi 8 août 2005
Statut
Membre
Dernière intervention
13 décembre 2005

Ah plus la peine j'ai trouvé
Messages postés
33
Date d'inscription
lundi 8 août 2005
Statut
Membre
Dernière intervention
13 décembre 2005

je ne sais si je me suis trompé quelque part car je ss nood mais ça met :
* /sockwrite: 'theclient*' no matching sockets (line 35, script12.ini)
Messages postés
64
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
29 juillet 2006

merci sa promet surtout en tcl....
Afficher les 16 commentaires

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.