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

Réseau Discussion :

Contenu d'un QDataStream dans un char*


Sujet :

Réseau

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Par défaut Contenu d'un QDataStream dans un char*
    Bonjour à tous, je cherche à récupérer le contenu d'un QDataStream dans un char*.

    J'utilise une socket entre deux programmes, qui s'envoient des tableaux de char. Je ne peux pas utiliser de QString (même si j'aimerais) et je dois avouer que les tableaux de char me posent beaucoup de problèmes.

    D'un côté, j'ai plusieurs tableau dont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char trame_pret[2] = { 'R', '\0' };
    Et je pensais le recevoir de cette façon de l'autre coté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    QDataStream in(socket);
    // ensuite je récupère le paquet en entier dans in, ça ça passe
        if (tailleMessage == 0) // Si on ne connaît pas encore la taille du message, on essaie de la recuperer
        {
            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 recupère
        }
     
        // Si on connaît la taille du message, on verifie 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 methode
            return;
    et ensuite j'essaie ce genre de trucs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* test[20];
     
    in >> test;
    Mais ça ne marche pas du tout, pourtant dans la doc de Qt il y a ça : http://qt.developpez.com/doc/3.3/qda...erator-gt-gt-d, donc ça doit forcément être faisable...

    Avez-vous une astuce ?

    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    peut-être en passant par une QString avant?

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Par défaut
    Quand j'essaie de passer par une QString et de l'afficher, rien n'apparaît dans le QTextEdit :s

  4. #4
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Le plus probable c'est que ta méthode retourne sans rien lire du buffer parce que rien n'est encore disponible.
    Par ailleurs pour des communications simple, il est beaucoup plus facile d'utiliser des messages texte avec le retour à la ligne comme séparateur.

  5. #5
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Bonjour,

    A moins que la version de Qt réellement utilisée soit la 3.3, alors peut être que la référence documentaire n'est pas la bonne...
    Mais dans le doute, je proposerais quand même d'utiliser l'exemple fournit ici :

    http://qt.developpez.com/doc/4.6/qdatastream/#details

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Par défaut
    Finalement j'ai réussi à envoyer et recevoir des char*, je suis content. J'ai beaucoup lutté^^
    Par contre je suis obligé de tout afficher via qDebug, impossible de les transférer dans des QString et que le résultat soit différent de symboles insupportables :s

    Si vous avez une idée pour ça, je suis preneur^^

    Merci de votre aide

  7. #7
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Ca c'est vraisemblablement un problème d'encodage. Mais tu peux utiliser des QTextStream pour lire et écrire des QString dans le socket de chaque côté. Et là normalement plus de soucis.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Par défaut
    Bonjour,

    J'ai le même problème que toi je n'arrive pas à exploiter les infos reçues avec la socket ! J'ai utilisé l'exemple Qt IPC :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [COLOR="rgb(46, 139, 87)"]//Récupération des données du serveur[/COLOR]
     void Socket::readData()
     {
          QDataStream in(socket);
         in.setVersion(QDataStream::Qt_4_6);
    
         if (blockSize == 0) {
             if (socket->bytesAvailable() < (int)sizeof(quint16))
                 return;
             in >> blockSize;
         }
    
    	if (socket->bytesAvailable() < blockSize) 
            return;
    	else
    	{
    		qdebug() << "Tout le message a été reçu";
    		[COLOR="rgb(46, 139, 87)"]//afficher le message mais comment l'afficher dans qdebug()[/COLOR]
    	}
    
         if (in.atEnd())
             return;
    
    	// Partie de code un peu flou ??! Si quelqu'un peut m’expliquer au passage ?
         QString nextFortune;
         in >> nextFortune;
    
         if (nextFortune == currentFortune) {
             QTimer::singleShot(0, this, SLOT(requestNewConnexion()));
             return;
         }
     }
    J'aimerai juste dans un premier temps afficher ce qui a été envoyé pour voir si les données de départ sont conservées !!

    Je vous remercie d'avance !

Discussions similaires

  1. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 15h30
  2. [Stream] Mettre le contenu d'un File dans un tableau de byte
    Par JohnBlatt dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 25/08/2006, 15h18
  3. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 12h49
  4. Ecire le contenu d'un memo dans une bd
    Par ApollloCrid dans le forum Bases de données
    Réponses: 7
    Dernier message: 22/07/2005, 14h58
  5. [LG]Ecrire le contenu d'un fichier dans un autre
    Par lucke dans le forum Langage
    Réponses: 10
    Dernier message: 26/04/2003, 21h48

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