IP-Adresse



  • hi,
    "Njed!"
    Ti gawarisch pa-russki ? 😃

    lw



  • Für jeden WSAStartup()-Aufruf sollte man auch WSACleanup() aufrufen.



  • Achtung! gethostbyname ist zwar schön einfach, aber laut platform sdk als deprecated eingestuft.
    Man soll besser getaddrinfo verwenden. Das ist auch nicht viel komplizierter:

    int ResolveToIP(const char* szServerName, int iPort, int& IP)
    {
        IP = 0;
    
        // Die IP bekommen wir mit Hilfe der Funktion getaddrinfo.
        addrinfo* pAddrInfo = new addrinfo;
        ZeroMemory(pAddrInfo, sizeof(addrinfo));
        // getaddrinfo erwartet die Portnummer als ASCII-String
        char szPort[16];
        itoa(iPort, szPort, 10);
        int iResult = getaddrinfo(szServerName, szPort, NULL, &pAddrInfo);
        if(iResult != 0)
        {
            delete pAddrInfo;
            return iResult;
        }
    
        // Die IP als DWORD auslesen:
        IP = reinterpret_cast<sockaddr_in*>(pAddrInfo->ai_addr)->sin_addr.s_addr;
        delete pAddrInfo;
        return 0;
    }
    

    [ Dieser Beitrag wurde am 30.11.2002 um 21:26 Uhr von cd9000 editiert. ]



  • warum legst du pAddrInfo auf dem heap an? hat das irgendeinen sinn? das wär doch ideal auf'm stack. 😞



  • Naja. Das wäre auch keine große Ersparnis:

    int ResolveToIP(const char* szServerName, int iPort, int& IP)
    {
        IP = 0;
    
        // Die IP bekommen wir mit Hilfe der Funktion getaddrinfo.
        addrinfo addrinfo_auf_dem_stack;
        addrinfo* pAddrInfo = &addrinfo_auf_dem_stack;
        ZeroMemory(pAddrInfo, sizeof(addrinfo));
        // getaddrinfo erwartet die Portnummer als ASCII-String
        char szPort[16];
        itoa(iPort, szPort, 10);
        int iResult = getaddrinfo(szServerName, szPort, NULL, &pAddrInfo);
        if(iResult != 0)
            return iResult;
    
        // Die IP als DWORD auslesen:
        IP = reinterpret_cast<sockaddr_in*>(pAddrInfo->ai_addr)->sin_addr.s_addr;
        return 0;
    }
    

    getaddrinfo erwartet einen Zeiger auf einen Zeiger. Und man kann nicht einfach &&addrinfo_auf_dem_stack schreiben.



  • ok, danke! aber ich denke mal da gibt's auch eine möglichkeit das direkt zu machen. &&addrinfo_auf_dem_stack schreiben
    vielleicht mit klammern und sowas 😞



  • Das geht ziemlich sicher nicht. Und zwar weil du damit die Adresse einer lokalen Variablen bekommen würdest. Das geht aber IMHO nicht.



  • Ich hab das zwar noch nie verwendet, aber trotzdem: Wenn ich in die Doku schaue, dann steht da, daß die Funktion selbst allokiert. Richtig müßte es dann eigentlich so aussehen:

    addrinfo* pAddrInfo = NULL;
    getaddrinfo(szServerName, szPort, NULL, &pAddrInfo);
    freeaddrinfo(pAddrInfo);
    

    Oder sehe ich das falsch?



  • getaddrinfo
    -----------

    Windows NT/2000/XP: Included in Windows XP and Windows .NET Server.
    Windows 95/98/Me: Unsupported.

    Also da würd ich noch ein paar Jahre warten, bis man die Funktion wirklich einsetzen sollte, bis 95 und Co endlich vom Fenster sind. 🕶



  • -King-:
    Nein. Du hast Recht. 🙂

    Unsupported:
    das wundert mich aber. 😕
    Bei mir läuft das tadellos, und ich verwende Windows 98.

    [ Dieser Beitrag wurde am 30.11.2002 um 21:53 Uhr von cd9000 editiert. ]



  • -King-:
    Nein. Du hast Recht. 🙂

    Wie immer! 🙄 🙂



  • vielleicht hast du dir zufällig die DLL eingefangen wo das drin ist 😃



  • <Immer das...>:
    Mir scheint du bist nicht sehr häufig hier.

    Vielleicht hab ich die DLL bei der Installation vom Internet Explorer erhalten. Der installiert immer so viel...

    [ Dieser Beitrag wurde am 30.11.2002 um 22:00 Uhr von cd9000 editiert. ]



  • <Immer das...>:
    Mir scheint du bist nicht sehr häufig hier.

    Was soll das denn bedeuten? Willst du damit sagen, das -King- sonst nie recht hat? Also meiner Meinung hat er ziemlich Ahnung und fast immer recht, wenn er hier was schreibt. 😡
    Ich bin eigentlich oft hier. 🙂



  • *push* 🙂



  • Ich habe damit nicht gemeint, dass -King- sonst niemals Recht hat, er hat sogar recht häufig Recht.
    Ich habe damit gemeint, dass ich auch häufig Recht habe. Du scheinst nicht zu sehen, dass ich in diesem Forum viel Sinnvolles poste.



  • Danke für die Antwort! 🙂

    So meinte ich es natürlich nicht. Auf jeden Fall tust du viel Gutes für diese Forum und hilfst vielen Leute! Das habe ich schon beobachtet. :p Danke dafür. 😉 😃


Anmelden zum Antworten