[R] TCPRecv & paramètre "maxlen"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
yohan8
Niveau 6
Niveau 6
Messages : 245
Enregistré le : mer. 07 déc. 2011 22:34
Localisation : Rhône
Status : Hors ligne

[R] TCPRecv & paramètre "maxlen"

#1

Message par yohan8 »

Bonjour,

j'ai 2 questions au sujet de la fonction TCPRecv :

Dans les paramètres nous pouvons indiquer le nombre maximal de caractère que peut enregistrer la variable résultante de TCPRecv. Imaginons que je reçoit sans interruption une suite de caractère. La fonction va-t-elle attendre d'atteindre le nombre maximum de caractère pour continuer le script ?

Imaginons maintenant que je reçoit un certain nombre de caractère tout les 2 sec. En faisant une boucle qui enregistre les caractères reçut, le script va-t-il renvoyer les bouts de caractères indépendamment ou va-t-il les mémoriser jusqu’à atteindre le nombre de caractère maximum ?
► Afficher le texteun exemple car c'est pas bien claire
Modifié en dernier par yohan8 le mar. 01 oct. 2013 11:35, modifié 1 fois.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] TCPRecv & paramètre "maxlen"

#2

Message par FireFox »

Bonjour,
Tant que tu n'appelles par la fonction TCPRecv, tout ce qui est reçu est mit dans un buffer interne.

Le paramètre maxlen permet de spécifier la longueur maximum que peut retourner la fonction TCPRecv et si il y a plus ça sera dans le prochain appel de la fonction et ainsi de suite.

Cdlt, FireFox.
Avatar du membre
yohan8
Niveau 6
Niveau 6
Messages : 245
Enregistré le : mer. 07 déc. 2011 22:34
Localisation : Rhône
Status : Hors ligne

Re: [..] TCPRecv & paramètre "maxlen"

#3

Message par yohan8 »

Ce qui pourrait couper un mot si les caractères reçut sont plus important que ceux du paramètre.

Pour intégrer le contexte de mon véritable problème : je reçois des infos sur l'état d'une connexion que je réceptionne par TCPRecv. Dés que celle-ci me convient pas j’interviens.

Pour vérifier son état je check les retours d'info de TCPRecv par StringInStr pour cibler les infos que je désire.
Chaque infos se tiens sur une ligne. Dés que le StringInStr approuve je récupère la ligne concerner pour la traiter dans sa totalité.
Le problème avec le paramètre "maxlen" est que mes lignes peuvent être mangé par le nombre de caractère maximum qui à été atteint et du coup je peux perdre l'info de ma ligne ciblé.

Pour éviter cela il faudrait prendre un paramètre "maxlen" important pour ne jamais avoir à manger une ligne.
Le compromis est que je dois checker les retours d'info très rapidement pour réagir encore plus rapidement.
Si par malchance je reçoit constamment des chaines de caractère sans interruption, la fonction TCPRecv va continuellement les enregistrer jusqu'à attendre le "maxlen" ce qui pourrait me faire perdre de précieuse milliseconde de réaction.. (1ère question)

Deplus je peux recevoir 2 informations différentes dans la masse de caractère que je reçois. Si le texte que je traite avec StringInStr contient ces 2 infos, mon script ne va prendre en compte que la première infos.


L'idée serait de renvoyer les retours d'infos par ligne complète et de les checker une par une par StringInStr.
Je vais partir sur cette idée, mais si vous avez des suggestions je suis preneur ! :D
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] TCPRecv & paramètre "maxlen"

#4

Message par FireFox »

Recevoir 2 informations différentes en même temps ce n'est pas possible sauf si dans le programme distant tu envoies deux informations coupés en même temps ce qui n'aurait aucun sens (puisque la définition du TCP est d'envoyer le paquet puis d'attendre la réponse qui indique que la packet a correctement été reçu).

Concernant le fait de ne pas recevoir entièrement la donnée lors de l'appel TCPRecv, cela n'a pas beaucoup de rapport avec maxlen, celui sert je dirai à optimiser le programme si tu ne veux pas avoir un trop gros buffer ou de mettre une valeur qui correspond à peu près à ce que tu vas recevoir etc. (ce qui n'a pas vraiment son intérêt ici puisque c'est généré de manière interne.

Pour palier à ce problème inévitable tu peux recopier un exemple concret qui est le http avec son paramètre content length pour indiquer la longueur de la donnée à recevoir avant de couper la connexion.

Un exemple simple :
[LENGTH=9]ma donnée
ou carrément:
[9]ma donnée
ou:
9}ma donnée

enfin t'as compris, après tu gères ça comme tu veux :)

Cdlt, FireFox.
Répondre