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 :

incompris : in >>


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut incompris : in >>
    Bonjour à tous.

    Voici une partie du code que j'étudie :
    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
    if (tailleMessage == 0) // Si on ne connaît pas encore la
    taille du message, on essaie de la récupérer
        {
            if (socket->bytesAvailable() < (int)sizeof(quint16)) // On
    n'a pas reçu la taille du message en entier
                 return;
            in >> tailleMessage; // Si on a reçu la taille du message
    en entier, on la récupère
        }
        // Si on connaît la taille du message, on vérifie si on a reçu
    le message en entier
        if (socket->bytesAvailable() < tailleMessage) // Si on n'a pas
    encore tout reçu, on arrête la méthode
            return;
        // Si ces lignes s'exécutent, c'est qu'on a reçu tout le
    message : on peut le récupérer !
        QString message;
        in >> message;
    La syntaxe "in >> " apparaît deux fois ici. Je précise que je travail avec Qt.

    Il est précisé dans le texte que in est un objet :
    Notre objet " in" va nous permettre de lire le contenu du sous-paquet que vient de recevoir la socket du client.
    je ne comprends pas cet objet "in" pour lequel je n'ai trouvé d'explication, ni dans C++, ni dans Qt.

    Quant à la syntaxe "in >> message", doit-on comprendre que l'on copie ou que l'on transfert les données de "in" vers "message".

    Pareillement, dans "in >> tailleMessage", le message reçu peut être supérieur à la seule valeur de taille du message (un quint16). Comment alors extraire de "in" la seule taille du message .

    Bref, cet objet "in" m'est assez obscure et je ne l'ai pas trouvé documenté.

    Pouvez-vous éclaircir ma lanterne ?

    Merci par avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,
    Quel est le type de in ? Ensuite regarde ce que fait l'opérateur >> sur celui-ci.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Serait-ce un QDataStream ?

    il y a le code suivant qui précède celui que j'ai donné dans mon premier post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QDataStream in(socket); //on récupère le message
    socket étant défini ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
    "in" serait alors le nom donné à l'objet instancié QDataStream ?

    Normal alors que je ne trouve pas de documentation, je croyais que c'était une fonction du langage/framework. Si c'est cela, cette dénomination n'est pas très judicieuse.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est précisément cela, une variable définie par un appel à son constructeur.

    Et in pourtant un nom assez logique, pour désigner l'entrée.
    exactement comme std::cin est le flux d'entrée standard du C++ et std::cout est le flux de sortie.

    surtout que c'est probablement une variable a peu près locale.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Et bien, merci beaucoup pour cette confirmation.

    Une véritable erreur de débutant. Mais on apprend de ses erreurs, parait-il.

    Maintenant, comment se peut-il que "in" soit affectable aussi bien à un short (tailleMessage) qui est un quint16 qu'à un Qstring (message) ? Peut-être qu'il ne prend alors que les 16 premiers bits de la valeur de "in" pour l'affecter à tailleMessage et que dans le cas du Qstring il prend l'ensemble des bits qui se trouvent dans "in" ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Et si tu lisais un peu la doc ?
    Y'a bien l'opérateur>> défini pour tous les types dont tu parles.
    Si leur système est un peu bien fait et logique, ce dont je ne doute pas, l'utilisation est triviale à comprendre : >> sort d'abord un header qui est la taille du paquet puis le >> suivant extrait les données en elles-mêmes. Classique de l'utilisation de TCP.
    >> n'est pas du tout une affectation, c'est "envoi à X" et X traite ça comme entrée.
    Les lignes que tu présentes devraient être internes au traitement.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci Bousc.

    Effectivement, je lis la doc en permanence. Mais pas toujours ce qu'il faudrait.
    Même si elle est très bien faite, elle est vraiment très complète et bien sur, on passe souvent à coté de ce que l'on cherche. D'ailleurs taper << dans le moteur de recherche de Qt ne donne pas un résultat probant. D'où mon passage sur ce forum.

    Je pense avoir compris maintenant.

    Merci en tous cas pour l'aide que vous m'apportez.

Discussions similaires

  1. return _variable : code incompris
    Par sanatou dans le forum C++
    Réponses: 6
    Dernier message: 31/10/2006, 22h50
  2. Probleme de wifi incompris
    Par MegaBigBoss dans le forum Hardware
    Réponses: 8
    Dernier message: 09/07/2006, 14h40
  3. Point incompris d'un tutoriel
    Par louroulou dans le forum Access
    Réponses: 1
    Dernier message: 13/06/2006, 20h53
  4. Message incompris
    Par philippef dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2005, 15h39
  5. JE SUIS ORRIFIÉ ::: le NULL ::: est incompris !!!
    Par SQLpro dans le forum Décisions SGBD
    Réponses: 14
    Dernier message: 24/05/2005, 13h47

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