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 :

Déduire l'@ Broadcast à partir d'une autre @ IP en char


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut Déduire l'@ Broadcast à partir d'une autre @ IP en char
    Bonjour,
    J'ai un problème pour améliorer mon petit programme utilisant des sockets.
    J'ai créé une petite interface graphique avec gtk qui permet de rentrer des informations, dont des adresses IP des machines à joindre.
    Comme toutes ces machines sont dans le même réseau, elles ont typiquement des adresses du genre:
    - 192.168.1.2 et 192.168.1.16 (donc @broadcast => 192.168.1.255)
    ou
    - 192.168.0.2 et 192.168.0.9 (donc @broadcast => 192.168.0.255)

    Pour l'instant je suis arrivé à récupérer ces valeurs dans des gchar et je peux par exemple les afficher sans problème avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const gchar* adresse_pa
    const gchar* adresse_clt1
     
    printf("\nparametres de la connexion: \nadresse du point d'acces %s  \nadresse du client1 %s \n",adresse_pa,  adresse_clt1);
    Mon soucis est qu'il faudrait que j'envoie des informations aux machines clientes. J'utilise pour cela une socket qui utilise l'@ broadcast associée au réseau (cf exemple du dessus.)
    Pour l'instant mon application fonctionne mais il faut que je recompile à chaque fois que mon @ de réseau change (192.168.0.0 ou 192.168.1.0). Je voudrais donc déduire l'@ broadcast à partir d'une des adresses des machines clientes (du type 192.168.0.2 par exemple ). Malheureusement je n'arrive pas à isoler les caractères situés apres le troisième "." de manière à les remplacer par "255".

    Au départ je pensait utiliser la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* strchr(const char* chaine, int caractereARechercher);
    mais elle s'arrête au premier caractère recherché.

    Existe-t-il une fonction permettant de faire ce genre de manipulation sur les chaines ?

    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Je te conseille de parser l'adresse IP pour la convertir en une séquence de quatre octets, et de faire tes travaux dessus...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je te conseille de parser l'adresse IP pour la convertir en une séquence de quatre octets, et de faire tes travaux dessus...
    Merci pour ta réponse. Je ne savais pas ce que c'était que "parser" avant
    ( si ça consiste bien à identifier des champs de manière automatique, j'en ai déjà fait un petit peu pour lire le contenu du fichier /proc/net/wireless ... mais j'étais dans un cas où les valeurs à chercher étaient à des positions bien définies donc je m'en sortait facilement avec des "for" . Malgré tout je ne savais pas que ça s'appelait comme ça )
    Je vais donc continuer à rechercher de ce côté là .
    Je viens de trouver la fonction strsep() qui me permettra peut-être d'isoler les parties apres les points ...

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Oursdeglace Voir le message
    Je viens de trouver la fonction strsep() qui me permettra peut-être d'isoler les parties apres les points ...
    Bah, un bête sscanf() avec "%u.%u.%u.%u" suffit bien...

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bah, un bête sscanf() avec "%u.%u.%u.%u" suffit bien...
    c'est exactement le type de fonction que je cherchait ! (... mais comme j'ai encore peu d'expérience et que j'ai jamais eu à l'utiliser ...)
    Merci beaucoup

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    1/ il y a strrchr()
    2/ l'adresse broadcast est un peu plus compliquée que cela à déterminer (voir les très vieilles notions de réseaux de classes A, B et C et la notion plus récente de masque de sous-réseau), tu agis en considérant que tous les réseaux ont pour masque 255.255.255.0 (ou sont de classes C).

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

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Réponses: 3
    Dernier message: 09/07/2004, 10h23
  3. mise a jour d'une base a partir d'une autre base
    Par seb3099 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/06/2004, 08h20
  4. [VB.NET] Activer procédure d'une form à partir d'une autre
    Par ricil78 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/05/2004, 14h52
  5. UPDATE : table à partir d'une autre
    Par Laura dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/10/2003, 21h34

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