Page 1 sur 2

[UDF] Simple TCP

Posté : ven. 11 nov. 2011 20:56
par matwachich
Décidément, je suis à fond dans le TCP!!!

Je vous présente ce pas très nouveau UDF, car il fait la même chose, et de la même manière que TCPClass, sauf que il est construit de manière plus classique! Des fonctions toutes bêtes!

Il est plus performant que TCPClass, du fait que il est maintenant super simple de créer plusieurs Clients par scripts. Quand au serveur, on ne peut en créer qu'un seul par script, mais il est possible de modifier l'UDF pour prendre en charge plusieurs server, si quelqu'un en a besoin, je pourrai le faire, si non, c'est à mon avis des complications inutiles!

Au fait, il sera parfait pour les allergiques à la POO.

Et en bonus, je viens de tester, les 2 versions sont compatibles! C'est à dire qu'un client fait avec cet UDF peut parfaitement se connecter à un server fait avec l'UDF en POO!

Mise à Jour: 20/11/2011
► Afficher le texteChange Log - v1.1
Mise à Jour: 21/11/2011
► Afficher le texteChange Log - v1.1.1
Mise à Jour: 24/11/2011
► Afficher le texteChange Log - v1.2
SimpleTCP_1.2.zip
(118.26 Kio) Téléchargé 847 fois

Re: [UDF] Simple TCP

Posté : dim. 13 nov. 2011 13:57
par scorp84
Bonjour,

Je suis en plein dedans aussi et cet UDF me semble plus simple à gérer que ceux que j'avais trouvé jusque là.

Merci ++ pour ce partage ;-)

Amicalement.

BM

Re: [UDF] Simple TCP

Posté : mar. 22 nov. 2011 00:47
par matwachich
Plusieurs remarque concernant cet UDF:
- D'abord, ce qui peut être déroutant quand on ne le sait pas, c'est que le SocketID utiliser dans les fonctions de l'UDF n'a rien à voir avec le hSocket utiliser dans les fonctions TCP d'AutoIt.
Voyer ce post, et ma réponse en dessou

- Ensuite, le même membre m'a demander comment envoyer des plusieurs données en une seul fois, je lui ai expliqué ici, et j'en ai profiter pour lui montrer comme envoyer le plus simplement du monde des fichiers entier! Et je pense que c'est là, la grande force de mon UDF!!! (sans vouloir me venter bien sur! :P )

Edit: Ce 2e point m'a donné une idée, faire des fonctions générique de gestion de ce genre de cas:
une fonction pour créer un packet à envoyer, avec nom du packet, des paramètres, et un contenu
une autre pour décortiquer un packet reçu, et en extraire les éléments sus-cités.

Ces fonctions se trouvent aussi dans le zip, dans le fichier helpers.au3
► Afficher le texteLes fonctions
Au fait, l'UDF a été mis à jour! voir le premier post

Re: [UDF] Simple TCP

Posté : jeu. 24 nov. 2011 01:00
par matwachich
Mise à jour.

Re: [UDF] Simple TCP

Posté : ven. 25 nov. 2011 13:03
par Zippo
Salut matwachich,

Tu pourrais nous donner un exemple de serveur et de client ? J'ai un peut de mal avec sa du coup je n'arrive pas à faire une composition.

Merci d'avance

Re: [UDF] Simple TCP

Posté : ven. 25 nov. 2011 14:09
par Tlem
Pour les demandes de ce genre, c'est sur le forum d'aide générale.
Merci

Re: [UDF] Simple TCP

Posté : ven. 25 nov. 2011 18:26
par matwachich
Il y a 2 exemples dans la doc!
Cherchez bien!
► Afficher le textePS

Re: [UDF] Simple TCP

Posté : sam. 03 déc. 2011 17:00
par RL77LUC
La gestion des fichiers ... J'ai l'impression que vu la méthode, ça ne fonctionnera qu'avec des fichiers texte et non des exécutables, je me trompe ? Sinon, il est intéressant, mais les fonctions de bases ne sont pas si compliquées que ça.

Re: [UDF] Simple TCP

Posté : sam. 03 déc. 2011 20:09
par matwachich
Ca marche avec tous les types de fichiers (testé!)

Re: [UDF] Simple TCP

Posté : mar. 28 févr. 2012 14:36
par RL77LUC
J'ai regardé tout ça, et c'est assez intéressant. Juste une question : Côté serveur, comment faire une barre de progression pour l'utilisation du Broadcast sur des fichiers (Juste afficher l'avancement du transfert, quoi ...) ?

Re: [UDF] Simple TCP

Posté : jeu. 01 mars 2012 18:14
par matwachich
J'ai pas bien saisi: le serveur envoi ou reçoit des données???
Si c'est l'envoi, alors pas moyens (à ma connaissance) de savoir ou en est le transfert.
S'il reçoit, alors il suffit d'utiliser la fonction callback (_Receiving)

Ou alors, pour l'envoi, le receveur (le client) peut, lui, connaître l'état de réception. Alors il peut notifier le serveur de combien de données il à reçu et le serveur se base sur ces info pour savoir ou en est le transfert. Mais ça va encombrer la bande passante...

Re: [UDF] Simple TCP

Posté : ven. 02 mars 2012 10:27
par RL77LUC
Le serveur envoie. Comment je peux trier et envoyer les données ? Tu n'auras pas un exemple, stp ?

Re: [UDF] Simple TCP

Posté : ven. 02 mars 2012 12:22
par matwachich
Franchement... je comprend encore moins ta question :roll:
Désolé mais, "trier et envoyer" c'est super vague.

Explique exactement ce que tu veut faire

Re: [UDF] Simple TCP

Posté : ven. 02 mars 2012 12:35
par RL77LUC
J'ai des clients connectés dessus. Le serveur, lui, les liste et les rentre dans une TreeView. Ensuite je vais chercher un fichier et je le stream depuis le serveur en BroadCast. Je voudrais récupérer l'avancement du transfert en cours ...

Re: [UDF] Simple TCP

Posté : ven. 02 mars 2012 14:23
par matwachich
OK!
Alors désolé mais c'est pas possible directement... et c'est pas la faute à mon UDF, mais à comment sont faites les fonctions TCP:
En quelque sorte (d'après ce que j'ai compris) TCPSend retourne instantanément, elle envoi toutes les données d'un coup, et en suite, c'est la carte réseau (ou je ne sais qu'elle truc plus profond) qui se charge d'envoyer les données au rythme de la connexion.

Donc, impossible pour l'envoyeur de connaitre l'état d'avancement des transfert.

Mais, on peut contourner cela:
Le client, lui, qui reçoit les données, connait l'état d'avancement, et on peut faire en sorte que chaque client entrain de recevoir des données, notifie le serveur de son état d'avancement, toutes les 5 secondes par exemple.

IMPORTANT:
Le nombre d'octets reçus que la fonction callback _Receiving reçoit ne correspond aucunement en la taille du fichier envoyé!!!
Il correspond au fait à la taille du fichier encrypter + les balises de début et de fin de message (Chr(2) et Chr(3))
Donc, pour connaitre le pourcentage du transfert, il ne faut pas diviser le nombre d'octets reçus par la taille du fichier, mais par la valeur retourné par TCPSend
(Et la, je crois que la fonction _Broadcast ne retourne pas la valeur retourné par TCPSend, donc il faudra modifier un peut l'UDF, ou faire une boucle de _TCPServer_Send sur tous les clients manuellement)

PS: j'aurai bien fait un exemple, mais étant en pleins examens...

Re: [UDF] Simple TCP

Posté : ven. 24 mai 2013 10:04
par tatane
Bonjour tout le monde !

Par ce beau soleil (profitons en !) je viens de découvrir votre script qui me semble très intéressant.
Mais avant de me lancer dans un système multi-clients / serveur, je souhaiterais connaitre le nombre maximum de clients que le serveur peut gérer simultanément. Si je le mets en place, le serveur devra accepter entre 500 et 1000 connexions. Y a-t-il une restriction ?

En vous remerciant par avance.
Cordialement.

Re: [UDF] Simple TCP

Posté : dim. 26 mai 2013 22:22
par matwachich
La seule restriction est votre RAM! Et la "probable" lenteur de AutoIt. Faut tester!

Re: [UDF] Simple TCP

Posté : sam. 19 juil. 2014 19:33
par lacnia
Très bon UDF ! Merci beaucoup ! :)

PS : Un exemple concrès dans la doc pour cette fonction : _TCPClient_SetCallbacks($Client, "_TCP_Recv", ....) serait le bien venu :P

Re: [UDF] Simple TCP

Posté : mer. 30 juil. 2014 17:46
par RL77LUC
Bonjour,

Ayant commencé un nouveau projet de protocole de transmissions d'informations spécialement conçu pour AutoIt, j'ai décidé d'utiliser ton UDF pour base. Seulement, je rencontre un souci assez problématique : Que ce soit avec les exemples fournis dans la doc ou en les ayant modifiés, impossible de "stabiliser" la connexion.
Le client se déconnecte juste après avoir reçu la première instruction serveur. Dans ton exemple, donc, il m'affiche en boucle "Machin est connecté", vu qu'il ré-établit la connexion en boucle... Je ne pense pas que le souci vienne du client, puisque j'ai essayé avec Telnet, et même souci, sitôt que le serveur envoie une instruction, pouf, connexion coupée.
Côté serveur, on a donc en boucle "New Client!" puis "Lost Client!"...

Comment se fait-il ? Merci à toi.

Re: [UDF] Simple TCP

Posté : mer. 30 juil. 2014 21:07
par matwachich
La comme ça, de mémoire (fait super longtemps que j'ai pas revu mon code!):
- Vérifie qu'il n'y a pas un _Disconnect quelque part
- Vérifie la valeur retournée par le callback onConnect. Si je me rappel bien, il faut retourner 1 pour accepter la connexion.

Je vais jeté un coup d'oeil si c'est pas ça.