mon proble est lorsque j'envoi plusieurs SendText() un a la file de l'autre,
le texte recu est melanger..
Je cherche a savoir comment faire pour m'assurer des envois separer de mes sendText()
Merci
mon proble est lorsque j'envoi plusieurs SendText() un a la file de l'autre,
le texte recu est melanger..
Je cherche a savoir comment faire pour m'assurer des envois separer de mes sendText()
Merci
JaBaKa
Salut,
La première solution qui me vient à l'esprit est de te faire un protocole par ex :
Ainsi tu ne fait qu'un seul envoie de donnée via la socket côter serveur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <debut>tachaine<fin><debut>autre chaine<fin>
Ensuite lorsque tu reçois tes données coter client tu les traite en fonction des balises <debut> et <fin>.
Sinon tu peu essayer de faire une pause entre les envoies de texte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ServerSocket1->Socket->SendText="tachaine"; ShowMessage("Message envoyée"); ServerSocket1->Socket->SendText="autrechaine"; ShowMessage("Message envoyée");
A+
Ce comportement est étonnant car le protocole TCP a été conçu pour remettre au destinataire les paquets dans le bon ordre. Si donc le destinataire récupère les envois lorsqu'un évènement de réception lui dit de le faire, je vois mal pourquoi ça ne fonctionnerait pas. Peut être devrais-tu changer de composant.
RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM
C'est vrai que ce problème est vraiment bizar, mais je pense que cela vient du composant.
Mais bon, je pense que se faire un petit protocole est toujours plus simple pour des échanges via les sockets.
Non ce n'est pas un problème du composant. (Bien que je conseillerais plus le composant ICS pour travailler avec les sockets)
Et le comportement n'a rien de bizarre car les messages arrive bien dans l'ordre.
Le problème est la concaténation des messages.
Et pour résoudre ce problème il faut un caractère de séparation comme l'a montré Galip (le caractère de début n'est pas obligaoire.)
J'ai réussi a résoudre le problème en placant un Sleep() entre mes envois mais je me demande si cette technique ne gele pas le serveur le temps du sleep.
Je me demande si en c++ il existe une fonction qui se rapprocherait de celle de javascript setTimeOut(fonction(),temps); qui serait simple a utiliser
Merci a tous de vos reponses précieuses si possible
JaBaKa
Je me sers de SendText() du Tserver mais je me demande si SendBuffer() ne reglerais pas mon probleme pour ce cote mais serieusement je ne suis pas sur de comprendre le systeme de buffer et sa difference par rapport a celle du SendText()
en passant j'essaie de faire un jeu de carte multijoueur j'utilise le TServerSocket car il est facile d'utilisation et le seul je connais mais si quelqun
connais quelque chose de mieux pour mes besoins je suis preneur
JaBaKa
Le Sleep n'est pas une solution, juste du bidouillage. Il faut t'arranger à n'envoyer le flux suivant que lorsque le précédent a bien été reçu et géré (accusé de réception). Normalement, TCP s'occupe de cela.
J'utilise personnellement les composants ICS.
RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM
salut j'ai installé les composants ics ca l'air tres complet comme composant..
Mais sais-tu ou trouver de l'aide pour savoir comment s'en servir..
Réussir a envoyer des messages au clients x en particulier en tout cas le plus possible merci d'avance
JaBaKa
Sur le site ICS il y a des exemples et des programmes sont fournis en exemple dans le téléchargement.
RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager