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

Qt Discussion :

lire sur une socket avec Qt


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Par défaut lire sur une socket avec Qt
    Bonjour,

    je dois faire communiquer un client avec un serveur en QT.
    Le serveur envoie des données (en plusieurs segments TCP de taille différentes) au client . Le client doit lire ces données sur sa socket.

    exemple d'envoi de données côté serveur :
    send image data: 1024 octets
    send image data: 1024 octets
    send image data: 1024 octets
    send image data: 486 octets

    Pour lire les données je récupère le signal readyRead() qui m'indique quand des données sont prêtes à être lues sur la socket du client. Cependant je souhaiterai ne commencer à lire les données que quand je suis sûr que le serveur a bien tout envoyé. Comment puis - je faire ? Car le signal ready read m'est envoyé à chaque fois qu'un nouveau segment arrive sur ma socket

    Pour info
    Le format d'un message serveur est :
    N°de l'image | \n | Taille de l'image | \n | données de l'image

    Merci beaucoup,

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Le plus simple est de connaître la taille.
    la fonction bytesAvailable t'indique la quantité de donné non lue du soket.
    Voici un exemple
    http://qt.developpez.com/doc/4.4/network-fortuneclient/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 164
    Par défaut
    ça ne renvoi pas plutot le nombre d'octet reçu?
    ce qu'il faut faire, s'assurer que tu as reçu assez de données (grace a byteavailable() ) pour pouvoir lire le numero et la taille (tu les stockes dans des entiers (quint16 ou 32) puis tu effectues le test grace à byteavailable :
    si byteavailable < taille
    return
    sinon
    lecture

    ceci est effectué dans l'exemple Qt qui a été mis en lien

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par atomicJo Voir le message
    ça ne renvoi pas plutot le nombre d'octet reçu?
    non. A chaque réception ce nombre augmente et à chaque lecture ce nombre diminue.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Par défaut
    Merci, je vais essayer cela ce soir, je vous tiens au courant.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 164
    Par défaut
    oui en fait c'est le nombre d'octet reçu mais pas encore lu

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

Discussions similaires

  1. Interpolation sur une polyline avec tangentes
    Par Pedro dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 12/01/2006, 23h10
  2. Réponses: 16
    Dernier message: 10/11/2005, 22h51
  3. [visual c++] connaitre le debit sur une socket
    Par khayyam90 dans le forum MFC
    Réponses: 4
    Dernier message: 25/10/2005, 16h12
  4. Problème sur une cmd avec AWK
    Par OrangeBud dans le forum Linux
    Réponses: 3
    Dernier message: 02/06/2004, 10h51
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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