über winsock zu "google.de" connecten



  • Hi, ich habe aus einem anderen Topic das hier:

    #include <winsock.h>
    #include <stdio.h>
    
    #pragma comment(lib, "Ws2_32.lib")
    
    u_long test(char *host){
    
       struct hostent *hp;
       u_long host_ip;
    
        host_ip = inet_addr(host);
        if(host_ip == INADDR_NONE){
            hp = gethostbyname(host);
            if(!hp){
               printf("Unable to resolv hostname %s\n", host);
            }else{
               host_ip = *(u_long *)hp->h_addr;
           }
        }
        return host_ip;
    }
    
    int main(int argc, char *argv[]) {
    	printf("%d", test("google.de"));
    	getchar();
    }
    

    Ich möchte, dass man die Internetadresse angeben kann, und dahin connected wird.
    aber für inet_addr brauch man eine IP
    und das da oben, soll, glaub ich, genau das machen.
    aber bei mir kommt da immer "unable to re..."



  • du musst winsock vorher initialisieren wahrscheinlich mit WSAStartup oder so aehnlich...



  • WsaStartup schrieb:

    du musst winsock vorher initialisieren wahrscheinlich mit WSAStartup oder so aehnlich...

    Yep !

    Z.B. : Diesen ( aus einer alten MSDN kopieten ) Block in main() einfügen
    und die hässlichen returns ausbeulen:

    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    
    wVersionRequested = MAKEWORD( 2, 0 );
    
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
        /* Tell the user that we couldn't find a usable */
        /* WinSock DLL.                                  */
        return;
    }
    
    /* Confirm that the WinSock DLL supports 2.0.*/
    /* Note that if the DLL supports versions greater    */
    /* than 2.0 in addition to 2.0, it will still return */
    /* 2.0 in wVersion since that is the version we      */
    /* requested.                                        */
    
    if ( LOBYTE( wsaData.wVersion ) != 2 ||
            HIBYTE( wsaData.wVersion ) != 0 ) {
        /* Tell the user that we couldn't find a usable */
        /* WinSock DLL.                                  */
        WSACleanup( );
        return; 
    }
    
    /* The WinSock DLL is acceptable. Proceed. */
    

    Grüsse

    Gast++

    P.S.: "gethostbyname" soll nach dem VC Express MSDN obsolete sein.



  • Danke, immerhin kommt jetzt kein Fehler mehr, jedoch wenn ich Google.de teste kommt ein zusammenhängende Zahl, ohne trennende Punkte heraus, die mit 175 beginnt, und wenn ich Google pinge, kommt etwas ganz anderes heraus, ich dachte diese Funktion ist dazu da, um z.b. "meineseite.com" in eine IP zu konvertieren...
    oder stimmt das nicht? 😕



  • in nem u_long gehen auch keine punkte rein

    🙂



  • MasterOfPuppets schrieb:

    Danke, immerhin kommt jetzt kein Fehler mehr, jedoch wenn ich Google.de teste kommt ein zusammenhängende Zahl, ohne trennende Punkte heraus, die mit 175 beginnt, und wenn ich Google pinge, kommt etwas ganz anderes heraus, ich dachte diese Funktion ist dazu da, um z.b. "meineseite.com" in eine IP zu konvertieren...
    oder stimmt das nicht? 😕

    IP Adressen werden _BYTEWEISE_ dezimal dargestellt (aka "DOTTED DECIMAL NOTATION").
    Lass Dir die Zahl vielleicht mal in Hex anzeigen und und konvertier die _einzelnen_ Bytes ( je 2 Buchstaben bei der Adresse ) in Dezimalzahlen.

    Grüsse

    Gast++



  • Hm, ich weiß nicht ob ich das alleine hinkriege, die angegebene Funktion hab ich auch nur von einem anderen aus dem forum hier übernommen...



  • std::string getIpAddress(const std::string& host)
    {
    	// Fehlerbehandlung muss noch eingebaut werden
    
    	addrinfo* pAddrinfo;
    	getaddrinfo(host.c_str(), NULL, NULL, &pAddrinfo);
    
    	char ipAddressString[NI_MAXHOST];
    	getnameinfo(pAddrinfo->ai_addr, pAddrinfo->ai_addrlen,
    				ipAddressString, sizeof(ipAddressString),
    				NULL, 0, NI_NUMERICHOST);
    
    	return ipAddressString;
    }
    

Anmelden zum Antworten