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 :

Socket qui lit un certain nombre d'octets si présents dans le tampon.


Sujet :

C++

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 277
    Points : 946
    Points
    946
    Par défaut Socket qui lit un certain nombre d'octets si présents dans le tampon.
    Bonjour,

    je voudrais savoir s'il est possible de faire en sorte qu'une socket serveur lise un certain nombre d'octet de son tampon.

    Concrètement, je veux lire des messages de 2200 octets:
    - si le tampon de ma socket reçoit 1400 et quelques octets, j'attends les 800 suivants et je lis d'un coup les 2200 une fois les 800 arrivés.

    Est-il possible de faire quelque chose comme ça?

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Tout dépends de l'api que tu utilises, un petit bout de code pourrait être sympa pour qu'on sache sur quoi tu te bases.

    Avec Qt: tu as un test qui te permet de savoir combien de byte sont disponible à la lecture (availableByte de mémoire)

    Avec des sokets nu, c'est à toi de faire un tampon, tu lis quand tu as de la donnée, et tu la stock dans un tampon, à la lecture d'après tu relis et concatène avec la donnée précédemment lue. Puis tout les 2200 octet, tu extrait ce dont tu as besoin et tu le remonte pour que ça soit traiter.

    Ex (à transposer correctement, je fais ça vite fait pour avoir le concept en tête:
    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
     
    bool mySocket::read2200(myData& data)
    {
      char* data = new char[2200];
     
      while (unsigned int ByteRead = m_socket->read(data, 2200 * sizeof(char))) // tant qu'il y a quelquechose à lire
      {
         // On concatène ce qu'on vient de lire à notre tampon
         m_tampon += data; // Je sais que ça fonctionne pas comme ça, mais c'est l'idée qui est importante
      }
      if (m_buffer.size() > 2200)
      {
         // On extrait les 2200 premier octet de notre tampon
         m_tampon.extract(data.buffer, 0, 2200); // Je te laisse trouver la bonne méthode pour faire ça ;)
         return true;
      }
      return false;
    }
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 277
    Points : 946
    Points
    946
    Par défaut
    Merci pour ta réponse skeud.

    Pour l'instant, j'ai simplement travaillé avec recv(), j'ai une socket serveur qui reçoit bien à intervalles réguliers les messages client, mais c'est tout.

    Je n'ai, au passage, pas signalé que dans le cas qui m'intéresse, il se peut que le tampon soit rempli par plus de 2200 octets quand je cherche à le lire.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/05/2009, 19h32
  2. Charger juste un certains nombres d'octets
    Par Papy214 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2008, 19h24
  3. choisir un element d'un tableau qui doit verifier certains paramétres
    Par jeanboudi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/04/2008, 20h39
  4. Socket qui ne se connecte pas
    Par rod59 dans le forum Langage
    Réponses: 2
    Dernier message: 12/11/2006, 05h04
  5. Socket qui ne marche pas
    Par Guillaume602 dans le forum C++
    Réponses: 4
    Dernier message: 15/01/2006, 14h07

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