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 :

Envoyer et recevoir une chaîne de caractère par socket


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut Envoyer et recevoir une chaîne de caractère par socket
    Bonjour à vous ! Je suis débutant en c++ et je n'arrive pas à envoyer un message d'un client à un serveur en local. Quelque chose me trouble quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(csock,"salut",1024,0);
    le message arrive bien mais quand je remplace le "salut" par une variable string contenant un message ça ne marche plus. Si quelqu'un de plus éclairé (ça sera pas dur à trouver) peut m'expliquer comment envoyer une variable par socket ça m'aiderais beaucoup.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    Il faudrait le reste du code mais sinon ton appel a send est incorrect.
    Il faudrait plus faire comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char envoi[] = "salut"; 
    send(csock,envoi,sizeof(envoi),0);
    Si ta variable est de type char* il faut utiliser strlen(chaine)+1 à la place de l'opérateur sizeof

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Merci beaucoup à toi ! C'était effectivement la déclaration, j'ai une autre petite question, si je voulais passer non pas une chaîne de caractères mais une variable contenant le résultat d'un cin comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     cout << "Entrez un truc" << endl;
                    cin >> truc;
                    const char envoi[] = truc;
                    send(csock,envoi,sizeof(envoi),0);
    J'ai essayé plusieurs façon mais rien n'y fait ! Merci encore

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 505
    Par défaut
    Sinon, vous pouvez aussi utiliser de bibliothèques réseaux C++, comme Boost.Asio, et plus cette vieille API C datant des années boule à facettes.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Un socket ne transmet qu'une séquence d'octets. On peut aussi "tenter" d'émettre des objets "simples" ou bien des tableaux d'objets "simples", mais cela ne fonctionne qu'entres applications locales. Ce que j'appelle un objet "simple" est un objet qui ne contient que des types de base. En C++ on parle de POD qui n'auraient que des types scalaires hormis les pointeurs.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct AB {
       int a;
       int b;
    };
    AB  tab[3] = {{1, 2},{3, 4},{5, 6}};
    send(csock, tab, sizeof(tab), 0 );
    Pour obtenir la séquence d'octets correspondant à une std::string on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(csock, truc.c_str(), truc.length()+1, 0); // émet tous les caractères + le terminateur
    On peut aussi émettre la chaîne encadrée de guillemets, ce qui devrait simplifier les découpages à la réception si plusieurs données successives à émettre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::stringstream  ss;
    ss << std::quoted(truc);
    std::string  quo = ss.str();
    send(csock, quo.c_str(), quo.length(), 0); // émet chaîne entre guillemets

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Merci beaucoup pour tout ces détails, ça marche parfaitement avec c_str, je passe en résolu !

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

Discussions similaires

  1. [MySQL] Découper une chaîne de caractères par la droite
    Par Hboss dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/10/2011, 16h49
  2. [RegEx] Test d'une chaîne de caractère par expression rationnelle
    Par sliderman dans le forum Langage
    Réponses: 6
    Dernier message: 28/03/2008, 12h51
  3. Remplacer une chaîne de caractéres par une autre
    Par koKoTis dans le forum Linux
    Réponses: 6
    Dernier message: 15/10/2007, 09h00
  4. Scinder une chaîne de caractère par rapport à un séparateur
    Par Tontorise dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/07/2007, 13h28
  5. Réponses: 8
    Dernier message: 15/07/2006, 18h59

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