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++ Discussion :

r�cup�rer string par socket TCP


Sujet :

C++

  1. #1
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut r�cup�rer string par socket TCP
    bonjour,
    J'ai cod� un serveur et un client TCP sous C++ builder 6 en mode console. Lorsque que mon client se connecte au serveur, celui-ci fait appel � une m�thode qui r�cup�re une valeur (venant d'un microm�tre num�rique) sous forme d'une string. Cette valeur est ensuite renvoy� au client.
    Mais une fois que le client re�oit la valeur, celle-ci est affich� en caract�res sp�ciaux alors qu'elle est visible au niveau du serveur.
    J'ai essay� diff�rentes m�thodes mais sans r�sultats.

    Pour vous aider, je joins le code du serveur :

    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
    17
    18
    19
    20
     
        ServerSocket serveur(8060);
        ServerSocket new_sock;
        char msg[1];
        string val="002215";
        for(;;)
        {
            serveur.accept(new_sock);
            cout<<"connexion acceptee"<<endl;
            new_sock.set_non_blocking(false);
            new_sock.recvMessage(&msg,sizeof(msg));
     
            if(msg[0] == 'm')
            {
                    cout<<"une mesure est demandee"<<endl;
     
                    new_sock.sendMessage(&val,sizeof(val));
            }
            serveur.Close();
        }
    puis celui du client :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            ClientSocket client( "10.72.5.225", 8060 );
            char valeur[6];
            char msg[1];
            msg[0] = 'm';
            for(;;)
            {
            client.sendMessage(&msg,sizeof(msg));
            client.recvMessage(valeur,6);
            cout<<valeur;
            }
    voici la valeur que je re�ois au niveau du client :

    Donc toute id�e sera la bienvenue, je vous remercie d'avance pour votre aide.

    ++ spawnsy

  2. #2
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    serveur.accept(new_sock);
    Tu passes une copie de new_sock.

    new_sock.sendMessage(&val,sizeof(val));
    Tu peux montrer la fonction sendMessage ?

  3. #3
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    voila le code de la m�thode sendMessage() :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int ServerSocket :: sendMessage (const void *p, const int size) const {
     
     if ( ! Socket::send ( p, size ) )
      {
          throw SocketException ( "Impossible d'ecrire dans le socket." );
      }
      return true;
    }

  4. #4
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    C'est val.c_str() qu'il faut envoyer, avec comme taille val.length()

  5. #5
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    Donc d'apres ce que tu m'as dit, le serveur doit ressembler � ca :

    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
    17
    18
    19
    20
     
    ServerSocket serveur(8060);
        ServerSocket new_sock;
        char msg[1];
        string val="002215";
        for(;;)
        {
            serveur.accept(new_sock);
            cout<<"connexion acceptee"<<endl;
            new_sock.set_non_blocking(false);
            new_sock.recvMessage(&msg,sizeof(msg));
     
            if(msg[0] == 'm')
            {
                    cout<<"une mesure est demandee"<<endl;
                    val.c_str();
                    new_sock.sendMessage(&val,val.length());
            }
            serveur.Close();
        }
    mais malheureusement le client r�cup�re tjs des caract�res sp�ciaux

  6. #6
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    val.c_str();
    new_sock.sendMessage(&val,val.length());
    Non.

    new_sock.sendMessage( val.c_str(), val.length() );
    serveur.accept(new_sock);
    Tu dois modifier new_sock, donc c'est l'adresse qu'il faut passer.

  7. #7
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    merci ca marche, j'ai bien mes 6 chiffres mais ensuite arrive quelques caract�res sp�ciaux. Il ne faudrait pas mettre un z�ro de fin de cha�ne ?

  8. #8
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Citation Envoy� par bogsy15
    merci ca marche, j'ai bien mes 6 chiffres mais ensuite arrive quelques caract�res sp�ciaux. Il ne faudrait pas mettre un z�ro de fin de cha�ne ?
    Si.

  9. #9
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    par contre je ne sais plus trop comment faire. Si quelqu'un pouvais m'aider ca serai sympa

  10. #10
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    Citation Envoy� par bogsy15
    par contre je ne sais plus trop comment faire. Si quelqu'un pouvais m'aider ca serai sympa
    Tu envoies val.length() + 1.

    char valeur[7];
    ...
    client.recvMessage( valeur, sizeof(valeur) );

  11. #11
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    j'ai fait ce que tu m'as dit mayti4 mais ca ne change rien

  12. #12
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    Citation Envoy� par bogsy15
    j'ai fait ce que tu m'as dit mayti4 mais ca ne change rien
    Bizarre, montre ton code.

  13. #13
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    le serveur :

    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
    17
    18
    19
    20
     
        ServerSocket serveur(8060);
        ServerSocket new_sock;
        char msg[1];
        string val="321534";
     
        for(;;)
        {
            serveur.accept(new_sock);
            cout<<"connexion acceptee"<<endl;
            new_sock.set_non_blocking(false);
            new_sock.recvMessage(&msg,sizeof(msg));
     
            if(msg[0] == 'm')
            {
                    cout<<"une mesure est demandee"<<endl;
                    new_sock.sendMessage(val.c_str(), (val.length() + 1));
            }
     
            serveur.Close();
    Le client :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ClientSocket client( "10.72.5.225", 8060 );
            char valeur[7];
            char msg[1];
            msg[0] = 'm';
            for(;;)
            {
            client.sendMessage(&msg,sizeof(msg));
            client.recvMessage(valeur,sizeof(valeur));
            cout<<valeur;
            }

  14. #14
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    Je ne vois pas d'erreurs.

    Tu peux toujours mettre le 0 dans la partie client :

    char valeur[7] = {0};

  15. #15
    Membre confirm� Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par d�faut
    en fin de compte ca marche. C'�tait moi qui avait test� un truc et j'avais oubli� de mettre le code en commentaire.

    Donc voila je suis content que ca marche !!

    Merci a tous et surtout a Mayti4 pour son aide.

    ++ bogsy

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

Discussions similaires

  1. R�cup�rer/envoyer des strings par socket
    Par theandroitor dans le forum API standards et tierces
    R�ponses: 4
    Dernier message: 30/04/2014, 16h25
  2. Communication par socket TCP
    Par rhum187 dans le forum R�seau
    R�ponses: 0
    Dernier message: 29/01/2013, 18h45
  3. Envoyer Objet / Structure par socket TCP
    Par crazy33 dans le forum C++
    R�ponses: 5
    Dernier message: 21/11/2010, 20h49
  4. Communication par socket TCP entre module windows et linux
    Par =o0 MOH =0o= dans le forum R�seau
    R�ponses: 2
    Dernier message: 29/03/2007, 17h04
  5. d�butant : envoi d'un String par socket impossible
    Par 2tsiris dans le forum Entr�e/Sortie
    R�ponses: 4
    Dernier message: 26/02/2007, 18h17

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