IP kriegen ?? GetHostByName



  • #include <windows.h>
    #include <conio.h>
    #include <iostream>
    using namespace std;
    //#pragma comment(lib,"ws2_32.lib")  // für MSV C++
    
    int main()
    {
     char hostname[255];
     char *szIPAddress;
     WORD wVer;
     WSADATA wData;
     PHOSTENT hostinfo;
     wVer = MAKEWORD( 2, 0 );
    
     if ( WSAStartup( wVer, &wData ) == 0 )
     {
      if( gethostname ( hostname, sizeof(hostname)) == 0)
      {
       if((hostinfo = gethostbyname(hostname)) != NULL)
       {
        szIPAddress = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
       }
      }
     WSACleanup();
     }
    
      cout<<szIPAddress<<endl;
      getch();
      return 0;
    }
    

    GetHostByName() soll undefiniert sein, aba ich finde den void net 😕
    Kann mir jemand helfen oda mich zurchtweisen ? ^^



  • Ich verstehe dein Problem / Frage nicht.
    Stell sie präziser.
    Simon



  • Ok dann versuch ich es nochmal XD

    if( gethostname ( hostname, sizeof(hostname)) == 0)
    

    soll undefiniert sein
    also muss ja eine definition von "gethostbyname" zu finden sein ^^
    und ich finde die net



  • http://msdn.microsoft.com/en-us/library/ms738527.aspx
    1. winsock2.h inkludieren
    2. ws2_32.lib linken (ist bei Dir auskommentiert)

    Simon



  • theta schrieb:

    http://msdn.microsoft.com/en-us/library/ms738527.aspx
    1. winsock2.h inkludieren
    2. ws2_32.lib linken (ist bei Dir auskommentiert)

    Simon

    ok hab ich gemacht jetzt sieht es so aus:

    #include <iostream.h>
    #include <winsock.h>
    #include <winsock2.h>
    
    #pragma comment(lib, "ws2_32.lib")
    
    int doit(int, char **)
    {
        char ac[80];
        if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
            cerr << "Error " << WSAGetLastError() <<
                    " when getting local host name." << endl;
            return 1;
        }
        cout << "Host name is " << ac << "." << endl;
    
        struct hostent *phe = gethostbyname(ac);
        if (phe == 0) {
            cerr << "Yow! Bad host lookup." << endl;
            return 1;
        }
    
        for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
            struct in_addr addr;
            memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
            cout << "Address " << i << ": " << inet_ntoa(addr) << endl;
        }
    
        return 0;
    }
    
    int main(int argc, char *argv[])
    {
        WSAData wsaData;
        if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
            return 255;
        }
    
        int retval = doit(argc, argv);
    
        WSACleanup();
    
        return retval;
    }
    

    undefined reference GetHostName@8
    undefined reference WSAGetLastError@0
    undefined reference GetHostByName@4
    undefined reference inet_ntoa @4
    undefined reference WSAStartup@8
    undefined reference WSACleanup@0

    Hat sich nix geändert
    PS: Ich benutze CODE:BLOCKS



  • Bearfist schrieb:

    #pragma comment(lib, "ws2_32.lib")

    DAS geht glaube ich nur mit MS-Compilern. Das wirst Du mit CodeBlocks anders lösen müssen.



  • Wenn Du mit Deinem CodeBlocks den MinGW benutzt, dann heißt die lib dort: libws2_32.a

    Wie man CodeBlocks dazu bewegt, die mitzulinken, weiß ich nicht, frag mal im entsprechenden Forum nach.
    Ansonsten kannst Du das Programm auf der Kommandozeile mit:
    g++ prog.cpp -lws2_32 -o prog.exe
    selbst erstellen.



  • Aso ok..
    hab mir jez Visual Studio 2008 von MS runtergeladen
    ...werds ma da versuchen


Log in to reply