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 averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    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 chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    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.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    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 confirmé

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    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 averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    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

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    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

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    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.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    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

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Sur le site ICS il y a des exemples et des programmes sont fournis en exemple dans le téléchargement.

+ 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