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

Vue hybride

bogsy15 récupérer string par socket... 11/06/2006, 12h37
Mayti4 Tu passes une copie de... 11/06/2006, 13h11
bogsy15 voila le code de la méthode... 11/06/2006, 13h51
Mayti4 C'est val.c_str() qu'il faut... 11/06/2006, 13h55
bogsy15 Donc d'apres ce que tu m'as... 11/06/2006, 14h09
Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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