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 C Discussion :

Lire tout le contenu d'une socket en une seule fois


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Par défaut Lire tout le contenu d'une socket en une seule fois
    Bonjour a tous,

    Je voudrais savoir comme faire pour lire tout le contenu d'une socket en une seule fois avec un recv/read.

    Le problème c'est que je fais un select qui surveille l'entrée standard et un descripteur de socket et quand des données arrivent dans la socket je vais les lire, sauf que la lecture est parfois partielle, je peux vérifier en imprimant le retour de recv et en le comparant a la taille de la structure que j'ai envoyé.

    Et avec select, tant qu'il y a des données dans la socket, select signale ce descripteur comme étant prêt.

    Alors si quelqu'un a une solution, ce serait vraiment trop gentil et merci.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par maximus15 Voir le message
    Alors si quelqu'un a une solution, ce serait vraiment trop gentil et merci.
    Il n'y a pas de solution à ce problème.

    Le nombre de recv necessaires pour lire un message envoyé par send peut être variable.

    Parfois, 1 recv pour 1 send, parfois 3 recv pour 1 send, parfois 1 recv pour 2 send. Il n'y a pas de règle.

    La bonne solution, c'est de lire le nombre d'octets reçus et de savoir si tu as tout lu ce que tu attendais. Si tout n'est pas encore lu, tu stockes en local ce début et tu recommence ta boucle de lecture. C'est comme cela.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Par défaut
    Salut,

    Y aurait-il moyen alors de vider la socket après la première lecture, le fait qu'il reste des données dans la socket est gênant vis-a-vis de select()

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Le nombre de recv necessaires pour lire un message envoyé par send peut être variable.

    Parfois, 1 recv pour 1 send, parfois 3 recv pour 1 send, parfois 1 recv pour 2 send. Il n'y a pas de règle.

    La bonne solution, c'est de lire le nombre d'octets reçus et de savoir si tu as tout lu ce que tu attendais. Si tout n'est pas encore lu, tu stockes en local ce début et tu recommence ta boucle de lecture. C'est comme cela.
    Je suis d'accord avec tout ça, et tout ça constitue justement LA solution au problème. En résumé, pour lire exactement n octets sur un socket, il faut faire une boucle de recv, jusqu'à ce que n octets ont été lus. On peut faire une fonction pour s'en occuper, ce qui résout le problème, selon mon point de vue.

    Y aurait-il moyen alors de vider la socket après la première lecture, le fait qu'il reste des données dans la socket est gênant vis-a-vis de select()
    Dès données peuvent arriver à tout moment, cela n'a donc guère de sens.

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Par défaut
    Merci pour vos réponses,

    Finalement j'ai choisi d'aller avec un protocole et ça a réglé mon problème, je me suis déclaré une structure entête qui dit quelle opération va suivre et combien d'octets vont suivre, comme ça au niveau des recv je lis exactement ce qu'il faut et il ne reste rien dans les sockets. je passe en résolu.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par maximus15 Voir le message
    ...je me suis déclaré une structure entête qui dit quelle opération va suivre et combien d'octets vont suivre...
    C'est exactement ce qu'il fallait faire
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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