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 :

probleme envoi SendBuf()


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Par d�faut probleme envoi SendBuf()
    Bonjour,

    Je suis en train de developper un petit jeu avec un client serveur sous builder et je suis face a un probleme pour envoyer les donn�e de jeu aux clients.

    Je doit me debrouiller pour envoyer un vecteur de ma classe joueur par mon ServerSocket mais je ne sais pas comment faire.

    J ai essayer avec la fonction sendbuf :

    ServerSocket1->Socket->SendBuf(listjoueur[0],listjoueur.size());

    mais vu ke cette fonction utilise du void * bah ca met une erreur de compilation.

  2. #2
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Citation Envoy� par Syl91
    Bonjour,

    Je suis en train de developper un petit jeu avec un client serveur sous builder et je suis face a un probleme pour envoyer les donn�e de jeu aux clients.

    Je doit me debrouiller pour envoyer un vecteur de ma classe joueur par mon ServerSocket mais je ne sais pas comment faire.

    J ai essayer avec la fonction sendbuf :

    ServerSocket1->Socket->SendBuf(listjoueur[0],listjoueur.size());

    mais vu ke cette fonction utilise du void * bah ca met une erreur de compilation.
    Le mieux dans ces cas la est de se faire un format de trame, exemple ta trame pour� etre : LJ,Joueur1,Joueur2,Joueur3,...;
    quand le client recoit cette trame, il sais que c'est une liste de joueur grace au deux premier caractere "LJ", et sais que chaque login de joueur est s�par� par une virgule, la trame ce termine ici par un ';' ce qui va dire au client d'arr�t� de chercher des nom.
    Ceci est un exemple est tu peut l'adapt� comme tu veut pour toute sorte de trame ou de programme, du moment que le client et le serveur on le meme format pour les trame cela fonctionnera, si tu as des problemes demande moi des precisions.
    A plus

  3. #3
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    bonjour ,
    tu peux �galement fair un cast
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ServerSocket1->Socket->SendBuf((void*)listjoueur[0],listjoueur.size());
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Par d�faut
    J'effectue mes test sur le premier element de ma liste mais le cast n'a pas l air de fonctionner (enfin a mon avis je doit me tromper kk part ):

    //envoi du premier element joueur de la liste au client
    ServerSocket2->Socket->Connections[0]->SendBuf(((void*)&listjoueur[0]),listjoueur.size());

    //reception du client
    ClientSocket2->Socket->ReceiveBuf((reinterpret_cast<Joueur*>(&J)),sizeof(Joueur));

    Je pense que je dois me melanger ds les type pasque ca passe a la compile mais un bonne grosse erreur memoire m accueil kan je test une des valeur receptionn�...

    Pour moi ici je cast mon element de liste en void * , puis j l envoie et a la reception je cast en joueur* et recopie l adresse sur un element joueur cree a cet effet.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Par d�faut Desesperate Programming boy
    Bon cette fois je craque.....

    G essayer pas mal de chose mais ca ne marche tjrs pas...
    G d abord essayer d envoyer un bete entier, pas de probleme:

    ServerSocket2->Socket->Connections[0]->SendBuf((void*)&i,sizeof(int));
    ClientSocket2->Socket->ReceiveBuf((int*)&j,sizeof(int));

    ensuite je voudrais envoyer un element de ma liste suivant le meme principe :

    ServerSocket2->Socket->Connections[0]->SendBuf((void*)&listjoueur[0],sizeof(Joueur));

    ou listjoueur est de type vector<joueur> et joueur une classe contenant des AnsiString et des int.

    a la reception :

    ClientSocket2->Socket->ReceiveBuf((Joueur*)&J,sizeof(Joueur));

    ou J est un objet de type Joueur

    A l execution de tout ceci ,une jolie violation memoire....

    (j ai essayer avec du reinterpret_cast<Joueur *> mais meme probleme)

    Je ne sais plus quoi faire.... Help plz ! :'(

  6. #6
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Je ne sais pas de quoi est compos� exactement ta classe Joueur, mais si tu veut suivre mon id�e, fait comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    AnsiString trame ;
    int i ;
    trame = "LJ;"
    for(i=0;i<listjoueur.size();i++){
      trame += listjoueur[i].AnsiString1 ;
      trame += "," ;
      trame += listjoueur[i].AnsiString2 ;
      trame += "," ;
      ...
      trame += "," ;
      trame += listjoueur[i].int1 ;
      trame += "," ;
       trame += listjoueur[i].int2 ;
      trame += ";" ;
    }
     ServerSocket2->Socket->Connections[0]->SendText(trame) ;
    Pour ton client tu recoit la trame comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    AnsiString trame ;
    trame =  ClientSocket2->Socket->ReceiveText() ;

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Socket] Probleme envois de message
    Par Pierrick584 dans le forum C++
    R�ponses: 12
    Dernier message: 28/06/2006, 19h07
  2. [Mail] probleme envoie mail
    Par phoeniix07 dans le forum Langage
    R�ponses: 7
    Dernier message: 21/06/2006, 14h35
  3. [AXIS] Problem envoie de mail par webservice
    Par BriceTheNice dans le forum Services Web
    R�ponses: 1
    Dernier message: 21/06/2006, 11h29
  4. [MySQL] probleme envoi avec POST
    Par Tr@nkill dans le forum PHP & Base de donn�es
    R�ponses: 10
    Dernier message: 24/04/2006, 09h11
  5. Probleme envoi multicast sur XP
    Par BattlingJM dans le forum Windows
    R�ponses: 6
    Dernier message: 16/03/2006, 17h13

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