Hier 3 nützliche kleine Funktionen fürs Internet mit WINAPI



  • Alle Funktionen laufen fehlerfrei und sind sicher nicht perfekt aber ich bin ja auch noch Anfänger.
    Ob ihr es glaubt oder cniht, es ist für einen Anfänger verdammt schwer eine Stelle im Web zu finde wo genau diese eigentlich Standard-probleme gelöst werden. Ich habe 3 Std. gesucht und landete dann auf einer wunderschönen VB-Seite auf der ich endlich auch den VB_Code fürs auslesen der local-IP fand und habe alles in C portiert.

    Hier die Funktionen für Interessierte.

    Prüft ob Internetverbindung besteht...

    bool isInet()
    {
        HMODULE hDLL; 
        DLLFUNCTION1PROC dllf = NULL; 
    
        hDLL = LoadLibrary("WININET.DLL"); 
        if (hDLL == NULL) { 
            return false; 
        } 
        dllf = (DLLFUNCTION1PROC)GetProcAddress(hDLL, TEXT("InternetGetConnectedState")); 
        if (dllf == NULL) { 
            return false; 
        } 
    
    	DWORD fff;
        if((dllf(&fff, NULL)))
    		{
    		FreeLibrary(hDLL); 
    		return true;
    		}
    	FreeLibrary(hDLL); 
    	return false;
    }
    

    Löst Hostnamen auf und gibt Strings mit der IP in der üblichen Form wieder.

    bool hostname2ip(char* hostname, SOCKADDR_IN* addr)
    {
    unsigned long ip;
    HOSTENT* he;
    
    ip=inet_addr(hostname);
    if(ip!=INADDR_NONE)
    	{
    	addr->sin_addr.s_addr=ip;
    	return true;
    	}
    else
    	{
    	he=gethostbyname(hostname);
    	CopyMemory(&(addr->sin_addr),he->h_addr_list[0]+4,4);
    	return false;
    	}
    }
    

    Returned die aktuelle externe IP des lokalen Rechners...

    TCHAR* getIP()
    {
    TCHAR* pTC = new TCHAR[255];
    ZeroMemory(pTC);
    
    if(!(isInet()))    //Wenn keine inet-connection dann localhost weiterleiten
        {
        lstrcpy(pTC, TEXT("127.0.0.1"));
        return pTC;
        }
    
    gethostname(pTC, 255);
    SOCKADDR_IN addr;
    hostname2ip(pTC, &addr);
    lstrcpy(pTC,inet_ntoa(addr.sin_addr));
    return pTC;
    }
    

    Vergesst nicht mit delete[] pTCHAR; den von den Funktionen allokierten speicher wieder freizugeben, nachdem ihr mit den zurückgelieferten Pointern fertig seit.

    Cu all..
    Mfg..

    PS: Das alles ist noch 'vor-Code' den ich nicht überarbeitet habe, wollte nur mit den Interessierten geteilt haben.



  • Da sind paar Fehler die den Code unausführbar machen. Diese 2 fehler wurden absichtlich implementiert. Damit das klar ist ! 😉



  • Allerliebst! 😃



  • Ich hätte mir nich mehr die Mühe gemacht die funktion via LoadLibrary(),... aufzurufen, da sie eh auf jedem Windows-Rechner ab Win95 mit IE 4 vorhanden ist.
    Zudem liefert die Funktion z.B. bei iNet-Zugang über LAN nicht immer das gewünschte Ergebnis...



  • geeky schrieb:

    Ich hätte mir nich mehr die Mühe gemacht die funktion via LoadLibrary(),... aufzurufen, da sie eh auf jedem Windows-Rechner ab Win95 mit IE 4 vorhanden ist.
    Zudem liefert die Funktion z.B. bei iNet-Zugang über LAN nicht immer das gewünschte Ergebnis...

    für mien Programm macht es NICHTS aus ob LAN oder Internet. Es muss nur wissen dass eins von beiden verfügbar ist.



  • Danke fürs posten!!!!
    Du hast recht man braucht ewig um solche Funktionen zu finden... 😞
    Bin auch nur zufällig drauf gestoßen.



  • Tolga schrieb:

    Prüft ob Internetverbindung besteht...

    http://www.marian-aldenhoevel.de/dojo/internet.html


Anmelden zum Antworten