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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    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 confirmé
    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
    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

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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.

  5. #5
    Membre confirmé
    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
    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 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    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.

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