[UDF] Simple TCP

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

[UDF] Simple TCP

#1

Message 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é 806 fois
Modifié en dernier par matwachich le jeu. 24 nov. 2011 01:00, modifié 7 fois.
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [UDF] Simple TCP

#2

Message 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
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#3

Message 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
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#4

Message par matwachich »

Mise à jour.
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Zippo
Niveau 6
Niveau 6
Messages : 243
Enregistré le : mar. 30 nov. 2010 12:50
Status : Hors ligne

Re: [UDF] Simple TCP

#5

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] Simple TCP

#6

Message par Tlem »

Pour les demandes de ce genre, c'est sur le forum d'aide générale.
Merci
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#7

Message par matwachich »

Il y a 2 exemples dans la doc!
Cherchez bien!
► Afficher le textePS
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] Simple TCP

#8

Message 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.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#9

Message par matwachich »

Ca marche avec tous les types de fichiers (testé!)
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] Simple TCP

#10

Message 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 ...) ?
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#11

Message 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...
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] Simple TCP

#12

Message par RL77LUC »

Le serveur envoie. Comment je peux trier et envoyer les données ? Tu n'auras pas un exemple, stp ?
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#13

Message 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
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] Simple TCP

#14

Message 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 ...
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#15

Message 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...
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
tatane
Niveau 4
Niveau 4
Messages : 63
Enregistré le : mar. 30 juin 2009 20:47
Localisation : Angoulême
Status : Hors ligne

Re: [UDF] Simple TCP

#16

Message 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.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#17

Message par matwachich »

La seule restriction est votre RAM! Et la "probable" lenteur de AutoIt. Faut tester!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

Re: [UDF] Simple TCP

#18

Message 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
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] Simple TCP

#19

Message 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.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] Simple TCP

#20

Message 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.
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Répondre