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

Langage C++ Discussion :

Problème de pointeur


Sujet :

Langage C++

  1. #1
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut Problème de pointeur
    Bonjour à tous,
    je suis arrivée à capturer les paquets circulant dans le réseau et afficher leurs contenu en manipulant un pointeur de type const u_char*
    Le problème vient lorsque j'ai voulu lancer des threads qui vont traiter et afficher le contenu des paquets qui arrivent
    dans le main je capte les paquet( le pointeur de type cons u_char*) je le met dans une file de const u_char* .la file est une variable globale accessible par le thread, le main ne fait que capter les paquets et les mettre dans la file
    ici quand le thread affiche le contenu des paquets le contenu est bizarre malgré qu'en utilisant le débogueur le packet capturé du main et la tete de la fle pointe sur la meme adresse mais je ne comprend pas pourquoi le contenu est différent
    Dés que je met la fonction d'affichage tout va bien
    Je serai à l'attente de tout aide et merc d'avance

  2. #2
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut
    Je viens de trouver qu'en faisant ceci je suis entrain de copier l'adresse uniquement et non pas le contenu
    si j'utilise les objets de la stl la solution dera d'appeler la fonction copy(deb1, fin1,deb2) qui copie tous les éléments de deb1 à fin1 dans un autre conteneur, à partir de la position deb2
    mais je n'utilise pas les conteneur ici , je manipule un pointeur de type const u_char* en plus je ne connais pas sa fin car elle dépend de la longueur du paquet
    Que pourrait être alors la solution dans ce cas?
    Merci

  3. #3
    Membre expérimenté Avatar de Rewpparo
    Homme Profil pro
    Amateur
    Inscrit en
    Décembre 2005
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 170
    Par défaut
    Généralement les fonctions réseaux te permettent de récupérer la taille du paquet en même temps que le paquet lui même.

    Pour des blob de données, l'idéal est de faire une classe faite pour, qu'on appelle généralement blob, avec le buffer, la taille et des méthodes de base comme la copie. On peut dériver cette classe pour y ajouter des méthodes d'interpretation ou manipulation des données incluses dedans.

    Sinon il vaut mieux utiliser tout simplement memcpy pour balader les données, qui est parfaitement adapté à ce genre de cas.

  4. #4
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut
    Merci pour la réponse,
    Quand j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    memcpy(paquet,packet,ip_total_len);
    		q.push(paquet);
    sachant que packet est la variable locale qui contient l'adresse du paquet
    et paquet est la variable globale utilsé ensuite par le thread
    elle sont du meme type const u_char*
    mais l'erreur suivante apparait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error C2664: 'memcpy'*: impossible de convertir le paramètre 1 de 'const u_char *' en 'void *'
    1>          La conversion perd les qualificateurs

  5. #5
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut
    J'ai oublié de mentionner que ip_total_len est la longueur du paquet

  6. #6
    Membre expérimenté Avatar de Rewpparo
    Homme Profil pro
    Amateur
    Inscrit en
    Décembre 2005
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 170
    Par défaut
    Le message d'erreur te dit que si paquet est const, tu peux pas écrire dedans. Enlèves le const.

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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