IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TserverSocket SendText() probleme


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 24
    Points
    24
    Par défaut TserverSocket SendText() probleme
    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

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    Points : 69
    Points
    69
    Par défaut
    Salut,

    La première solution qui me vient à l'esprit est de te faire un protocole par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <debut>tachaine<fin><debut>autre chaine<fin>
    Ainsi tu ne fait qu'un seul envoie de donnée via la socket côter serveur.
    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+

  3. #3
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    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

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    Points : 69
    Points
    69
    Par défaut
    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.

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Points : 161
    Points
    161
    Par défaut
    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.)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    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

  8. #8
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    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

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    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

  10. #10
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme TClientSocket - TServerSocket
    Par Ju2Pom dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/03/2007, 17h04
  2. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  3. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  4. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo