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 :

Recherche d'IP d'un serveur


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Recherche d'IP d'un serveur
    Bonjour, j'utilise une serveur embarque (Lantronix Xport), je souhaite faire communiquer ce serveur avec un PC. Je sais que l'adresse IP du serveur est comprise entre 169.254.0.0 et 169.254.255.255, mais je ne la connais pas. J'ai donc cree une fonction qui balaye cette plage d'adress IP et utilise les socket windows pour trouver le serveur. Le probleme est que ma fonction est trop lente. La fonction connect() de la librairie winsock2.h est le probleme. Je voulais savoir si vous connaisiez une autre methode pour faire ca et si il y avais un probleme dans mon code. Si dessous le code dee la fonction en question.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     char server_connect(void)
    {     
        char ch[17];
        unsigned char i=0;
        unsigned char j=0;
        int val;
        while(i!=255 && j!=255)
        {
            sprintf(ch,"169.254.%d.%d",i,j);//create a string for the IP adress
            j++;      //test all the adress between 169.254.0.0 to 169.254.255.255
            if(j==255)
            {
                j=0;
                i++;
            }
            WSAStartup((MAKEWORD(2,0)), &WSAData);
            sock = socket(AF_INET, SOCK_STREAM, 0);
            sin.sin_addr.s_addr            = inet_addr(ch);
            sin.sin_family                = AF_INET;
            sin.sin_port                = htons(1100);
            val=connect(sock, (SOCKADDR *)&sin, sizeof(sin));
            if(val!=INVALID_SOCKET)//if the connection is ok check the Xport
            {
                serve_write("Test?");//send a value
                Sleep(10);//wait 10 ms
                if(server_read()=="OK!")return true;
            }               //if the answer is god the function is true
        }
        return false;//if there are no valid IP the function is false
    }

  2. #2
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    Salut, est ce qu'il n'est pas possible de mettre un soft DynDns sur le serveur et au niveau du client de lancer la translation du nom de domaine pour obtenir l'adresse IP plutot que de se "taper" une boucle de recherche ?
    Let there be light, sound, drums, guitar ... Let there be rock !

  3. #3
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Tout d'abord, pourquoi laisses-tu Windows décider quelle adresse IP donner à tes machines ? Et qu'est-ce qui te prouve que les 2 machines ne se verront pas attribuer la même adresse par Windows (d'accord, il y a une chance sur 65536 pour que ça arrive mais c'est pas très propre quand même). Car cette adresse est bien attribuée par Windows parce que tu n'as pas donné d'IP fixe et qu'il n'y a pas de serveur DHCP.

    Ensuite, balayer 65536 adresses pour savoir laquelle va répondre prend effectivement un peu de temps...
    Ou bien tu attribues des adresses IP à tes machines ou bien, si ce n'est pas possible, tu peux envisager de faire tourner un programme sur ton serveur qui va répondre à une requête d'un programme lancé sur le client et lui retourner son adresse. Plus précisément, ton client va envoyer à l'adresse de broadcast du réseau (ici : 169.254.255.255) une trame UDP sur un port donné que tu auras choisi et qui sera en écoute (LISTEN) sur le serveur qui l'interceptera par un programme qui enverra à ton client son adresse IP. Ceci n'est pas de la théorie, je l'ai déjà programmé (avec composants ICS) et ça marche. Voir http://alain.tauber.fr/WinLanMessage/WinLanMessage.php
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Re
    Merci pour votre aide.

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

Discussions similaires

  1. Recherche d'informations sur le serveur Counter-Strike
    Par ekudarius dans le forum Langage
    Réponses: 4
    Dernier message: 09/05/2009, 13h22
  2. [c# + exchange] Rechercher un contact sur un serveur exchange
    Par warenbe dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/04/2008, 10h40
  3. Réponses: 1
    Dernier message: 04/06/2007, 15h12
  4. rechercher un pwd sur le serveur
    Par flo456 dans le forum Administration
    Réponses: 2
    Dernier message: 01/09/2006, 21h08

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