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++Builder Discussion :

Lister les adresses IP builder starter


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut Lister les adresses IP builder starter
    Bonjour,

    J'utilise Indy TIdTCPServer1 pour un projet de connexion serveur/client, notamment la pile GStack pour vérifier si une IP est valide ou lister les IP locales

    Le code ci-dessous envoie l'erreur suivante : "Erreur de vérification d'étendue".

    Visiblement cela vient de la boucle for. J'ai essayé .RefCount()-1, pas d'erreur mais cela ne fonctionne pas.

    Si vous avez une solution, merci d'avance

    Cordialement


    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
     
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
     //lister  adresses IP
     for (int i = 0; i< GStack->LocalAddress.RefCount(); i++) //  "Erreur de vérification d'étendue"
      ListBox1->Items->Add(GStack->LocalAddress[i]); // sans la boucle, l'IPV4 s'affiche
    }
     
     
    // le code ci-dessous fonctionne bien
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      if (!(GStack->IsIP(Edit1->Text)))
    	ShowMessage ("Erreur");
    	  else  ShowMessage ("Adresse exacte");
     
    }

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    la méthode LocalAddresses te retourne un TStringList il ffaut donc utiliser la property count
    voici un exemple fonctionnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	String Tmp,IpAddr;
    	 for(int i(0);i<GStack->LocalAddresses->Count;i++)
    	{
    	    IpAddr=GStack->LocalAddresses->Strings[i];
    	   if (GStack->IsIP(IpAddr))
    	  {
    	  Tmp.sprintf(L"%s%d%s%s",L"Carte ",i+1,L" ",IpAddr.c_str());
    	  Memo1->Lines->Add(Tmp); // boucle appellée uniquement si l'adresse Ip est valide ce qui est stupide car retournée par l'OS
    	 }
          }
    résultat obtenu sur ma station de travail
    Nom : CartesRéseaux.PNG
Affichages : 399
Taille : 3,2 Ko
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Salut

    Ça marche merci ... Avec ListBox ou Memo

    Par contre l'adresse IPv6 de liaison locale n'apparaît pas.

    Cordialement

    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
     
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
     //Si plusieurs adresses IP
    	 String Tmp,IpAddr;
    	 for(int i(0);i<GStack->LocalAddresses->Count;i++)
     
    	{
    		IpAddr=GStack->LocalAddresses->Strings[i];
    	   if (GStack->IsIP(IpAddr))
    	  {
    	   Tmp.sprintf(L"%s%d%s%s",L"Carte ",i+1,L" ",IpAddr.c_str());
    	   ListBox1->Items->Add(Tmp);
    	   Memo1->Lines->Add(Tmp);
    	 }
    	}
    }

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Il semblerait que ce soit un bug connu
    Regarde ce post https://stackoverflow.com/questions/...-with-ipv6-net

    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Je vais voir ça. Merci DJM

    Cordialement

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Citation Envoyé par magdani Voir le message
    Par contre l'adresse IPv6 de liaison locale n'apparaît pas.
    Salut, si tu veux lister du IPv6, il ne faut pas vérifier avec la méthode IsIP, car ce code regarde pour du IPv4:
    Code Delphi : 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
    function TIdStack.IsIP(AIP: string): Boolean;
    var
      i: Integer;
    begin
     
     
    //
    //Result := Result and ((i > 0) and (i < 256));
    //
      i := IndyStrToInt(Fetch(AIP, '.'), -1);    {Do not Localize}
      Result := (i > -1) and (i < 256);
      i := IndyStrToInt(Fetch(AIP, '.'), -1);    {Do not Localize}
      Result := Result and ((i > -1) and (i < 256));
      i := IndyStrToInt(Fetch(AIP, '.'), -1);    {Do not Localize}
      Result := Result and ((i > -1) and (i < 256));
      i := IndyStrToInt(Fetch(AIP, '.'), -1);    {Do not Localize}
      Result := Result and ((i > -1) and (i < 256)) and (AIP = '');
    end;
    La doc dit:
    IsIP is a Boolean function used to indicate when the IP address in AIP contains a valid IP address expressed in numeric dotted-decimal form.

    IsIP will return True when the value in AIP contains four byte values (each byte in the range 0 to 255) separated by the '.' delimiter.

    For example:
    • 0.0.0.0 True
    • 255.255.255.255 True
    • 127.0.0.1 True
    • 256.0.0.0 False (The first byte is an invalid value).
    • 127.0.1 False (Not enough values to represent the 32-bit network address).

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Merci Crayon.
    Je vais voir ce que cela donne en c++

  8. #8
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Citation Envoyé par magdani Voir le message
    Merci Crayon.
    Je vais voir ce que cela donne en c++
    Peut-être que je n'est pas été clair, ce que je veux dire c'est de ne pas utiliser cette condition si tu veux du IPv6:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (GStack->IsIP(IpAddr))

Discussions similaires

  1. Comment lister les adresses emails d'un fichier
    Par djibril dans le forum Téléchargez
    Réponses: 0
    Dernier message: 30/06/2011, 15h28
  2. Réponses: 2
    Dernier message: 24/09/2010, 10h34
  3. lister les adresses ip
    Par flolebreton dans le forum Langage
    Réponses: 19
    Dernier message: 14/12/2009, 16h21
  4. Lister les adresses IP
    Par soft0613 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 23/03/2008, 21h15
  5. Cherche à lister les adresses IP dispo sur la machine
    Par yukkyyuk dans le forum Windows
    Réponses: 3
    Dernier message: 16/03/2005, 11h50

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