Page 1 sur 1

[R] TCP multi client

Posté : mar. 22 juil. 2014 20:16
par sozary
Bonjour,
Désolé pour ce post, étant donné que vous m'avez porté votre aide en Aide générale...
Voilà, je voudrais créer un serveur capable de gérer la connexion de plusieurs client, or j'ai trouvé ceci:
► Afficher le texte
Malheureusement, étant novice en autoit et n'étant qu'en Terminale et ayant un niveau d'anglais très faible, je n'est vraiment pas beaucoup compris les explications fournis par l'auteur du script... Donc si quelqu'un aurait le temps de soit réécrire le code de façon plus lisible pour un débutant où avec des explications, je lui en serais redevable :)!!
Merci d'avance!

Re: [..] TCP multi client

Posté : mar. 22 juil. 2014 21:14
par lacnia
J'ai commencé à expliquer le début, mais sa m'a complètement endormis, désoler ! Je vous envoi ce que j'ai traduit / expliqué :
► Afficher le texte
Bon je sais que c'est mauvais de faire les choses à moitier, mais sa m'a sérieusement ennuyé xD
Enfin, j'ai aussi arrêté car les fonctions TCP officiels d'autoit sont bof selon moi, je vous conseille de vous pencher du coter des UDF TCP, il y en existe plusieurs ... Ceux de MatwaChich qui est très intéressant !

Mais, si vous débutez, je vous déconseille fortement de commencer par programmer un serveur TCP !

Re: [..] TCP multi client

Posté : mar. 22 juil. 2014 21:14
par jguinch
Pense à utiliser la balise Spoiler pour le code (histoire de ne pas avoir un ascenseur de 3 km.. Merci :D

Re: [..] TCP multi client

Posté : mar. 22 juil. 2014 21:57
par sozary
Oui! merci déjà c'est un bon début :D! Mais je n'aime pas trop utiliser les UDF, car c'est pas.. authentique!

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 01:01
par lacnia
Hum ... Les UDF sont le plus souvent 10x meilleurs que les fonctions officiels d'autoit, ces derniers offre plus de flexibilité / stabilité.
Ce sont des fonctions améliorer ...

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 07:32
par jchd
[quote="lacnia"Les UDF sont le plus souvent 10x meilleurs que les fonctions officiels d'autoit[/quote]
Tu as quelques exemples ou c'est juste une gentillesse gratuite ?

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 10:14
par sozary
Bon, c'est sûr que les UDF sont très pratique,comme EzMySql, mais bon...
Sinon, pour la function Check(), j'ai réussis à comprendre que le gros du programme se passait ici:
► Afficher le texte
Donc si quelqu'un pourrait me l'expliquer ce serait gentil :D!

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 14:00
par blacksoul305
Bonjour,

je n'ai pas pris le temps de lire le code que tu as posté, en revanche je t'ai fait un exemple de multiclient (serveur / client) avec les fonction TCP authentiques.

Le client n'est pas du tout optimisé, il ne fait pour ainsi dire rien du tout ne serait-ce que se connecter. Néanmoins j'ai quand même fait l'ossature d'un serveur. Pas très optimisée non plus, l'objectif étant juste de comprendre comment tout fonctionne.
► Afficher le texteServeur
► Afficher le texteclient
Je ne sais pas si tu as lu le tutoriel sur le TCP qui présente quelques bases qu'il faut à tout pris comprendre pour réussir à faire ses propres scripts en TCP ou en tout cas comprendre les explications qui vont suivre.

Explications :

En fait, il est difficile d'imaginer un serveur qui ne supporte pas le multi-client. Que ce soit un serveur de jeu, un serveur de chat, tous les serveurs gèrent la connexion de plusieurs clients. Ce qui implique plusieurs parties et fonctions supplémentaires qui peuvent poser un problème. Essentiellement, un serveur multi-client doit :
  • savoir recevoir plusieurs connexions
  • gérer les déconnexions
  • recevoir et envoyer des données à tous les clients
Recevoir plusieurs connexions :

Un serveur, qu'il supporte le multi-client ou pas, est composé d'une chose importante : le socket d'écoute. C'est la porte d'entrée. L'unique endroit où les ordinateurs peuvent espérer se connecter au programme. Avec AutoIt, si le socket d'écoute est mis en place correctement, il suffit de placer un TCPAccept($socketEcoute) pour avoir l'ID de l'ordinateur connecté et pouvoir dialoguer avec, si jamais il s'est présenté bien sûr. Seulement, il peut y avoir plusieurs connexions se présentant sur le socket d'écoute, pour accepter les différentes connexions, il faut inévitablement intégrer l'acceptation éventuelle d'une connexion, dans la boucle principale du programme. Ou alors appeler cette fonction à intervalle régulier. Du coup, à la place d'avoir :
► Afficher le texteServeur basique
On a
► Afficher le texte
De plus, avoir plusieurs clients implique avoir une liste de ces clients. Tu verras que dans mon code à moi, la liste se présente par un simple tableau à une dimension. Le premier élément représente le nombre de connexions, et le dernier élément une connexion éventuelle qui n'a pas encore été acceptée. Entre les deux éléments, tous les clients qui sont connectés (logiquement).

Gérer les déconnexions :

Dans la configuration que j'ai opté, cela est assez simple. On teste toutes les connexions une par une envoyant des données et en vérifiant si elles ont été bien envoyées. On supprime ou pas l'ID du PC concerné dans le tableau et on obtient à la fin que les clients potentiellement connectés. D'où l'intérêt du tableau de cette forme là. Un tableau à plusieurs dimensions est un peu plus difficile à gérer par exemple.

Recevoir des données, et envoyer :

Pour la réception des données, il suffit soit de choisir sur quel client écouter, soit faire comme on a fait depuis le début, parcourir tous les clients et écouter sur chacun. On agit sensiblement de la même manière pour envoyer.

Finalement, mettre en place tout ça n'est pas le plus compliqué d'après moi. Il suffit seulement de pratiquer, les automatismes se feront au fil des projets TCP que tu entreprendras. Si mon code reste flou malgré tout, n'hésite pas.

Bon courage !

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 14:06
par lacnia
jchd a écrit :[quote="lacnia"Les UDF sont le plus souvent 10x meilleurs que les fonctions officiels d'autoit
Tu as quelques exemples ou c'est juste une gentillesse gratuite ?[/quote]

Hum d'accord, juste pour exemple :
Compare les fonctions officiel GUICrealelistview ( en rapport avec list view ) et l'UDF ControlListView proposants une vingtaine de fonctions par rapport aux listview comme par exemple _GUICtrlListView_SetExtendedListViewStyle ....

Pareille pour le TCP, cherche sur le forum un UDF tcp et compare le aux 5 fonctions autoit officiel TCP :)

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 16:46
par jchd
Les UDFs dont tu parles sont "officielles" en ce sens qu'elles sont maintenues par l'équipe et distribuées de concert avec le reste d'AutoIt et ses outils.

Re: [..] TCP multi client

Posté : mer. 23 juil. 2014 20:20
par sozary
Cher blacksoul305,
J'ai en effet lus ton tutoriel, c'est grâce à cela que j'ai réussis à créer le début du serveur, mais je n'avais pas assez de pratique pour faire un serveur multi-client.
Certaines lignes de codes restent floues, j'ai donc détaillé un peu ton code, pourrais-tu me dire si ces détails sont exacts? Et à un moment je n'ai pas compris 2 lignes, donc pourrais-tu me les expliquées svp? Merci quand même pour ce que tu as déjà fais!
► Afficher le texte

Re: [..] TCP multi client

Posté : jeu. 24 juil. 2014 00:53
par blacksoul305
Bonsoir,

j'ai rajouté les commentaires dans mon message précédent pour comprendre un peu mieux le code, en espérant que cela va t'aider.
J'insiste, le code n'est pas super bien optimisé, y a des lignes que l'on peut supprimer, j'ai fait en sorte d'avoir un code simple et dégagé pour voir clairement la démarche. Ce n'est pas du tout un exemple type.

Bon courage !

Re: [..] TCP multi client

Posté : jeu. 24 juil. 2014 09:56
par sozary
Merci! C'est bon, tout est clair là! Oui, après je pourrais apporter quelques modifications quand je coderais ça de façon banale et sans réfléchir! Sujet résolu, merci de votre aide à tous!