eigene IP-Adresse ausgeben



  • Hallo,
    ich habe folgendes Problem: ich würde ganz gerne die eigene IP-Adresse ausgeben.

    Da das problem mit Standard-C++ vermutlich nicht zu lösen ist gleich hier im WinAPI-Forum.

    Ich habe auch schon einige Beispiele aus dem web ausprobiert , allerdings haben die bislang nur fehlermeldungen produziert 😞 .

    z.B.dieses : http://www.tutorials.de/forum/c-c/291611-c-ip-ausgeben-2.html

    so gibt der compiler die fehlermeldung aus:
    fatal error C1083: Datei (Include) kann nicht geöffnet werden: "stdafx.h": No such file or directory

    wenn ich dieses include weglasse gibt er 78 Fehler aus 😕 , z.B.:

    (31) : error C3861: "WSACleanup": Bezeichner wurde nicht gefunden.
    (28) : error C2027: Verwendung des undefinierten Typs "hostent"
    (24) : error C3861: "gethostname": Bezeichner wurde nicht gefunden.
    ...

    so ähnlich ging es mir bislang bei allen beispielen aus dem web, ich habe noch kein funktionierendes gefunden.

    ich verwende Windows XP und Microsoft Visual C++ 2008 Express Edition.

    Was ist denn z.B.an dem beispiel falsch oder (noch besser) hat jemand vielleicht sogar ein funktionierendes oder einen link zu einem funktionierenden?

    danke schonmal,
    andi01.



  • Schonmal in die winap faq hier im forum geguckt... ➡



  • jo,
    dieser code hier produziert bei mir 282 Fehler 😕 : http://www.c-plusplus.net/forum/viewtopic-var-t-is-39386.html
    meistens sowas wie default-int nicht unterstützt

    dieser hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-39385.html
    (natürlich um main() ergänzt)283 fehler, eigentlichdieselben wie oben.

    mfg,
    andi01.



  • Also was für Fehler kommen denn genau bei

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

    Und das gibt nur die primäre IP des Hosts mit dem Namen deines Rechners aus.



  • da ich unmöglich 283 fehler hier posten kann hab ich mal ne txt-datei die diese fehler beinhaltet upgeloadet:
    http://rapidshare.com/files/273888689/ip_cpp-fehler.txt.html

    edit: bei deinem code kommen keine fehler, das problem ist gelöst. nur warum treten bei dem anderen code die fehler auf?



  • Die ersten 10 reichen meist...
    Simon



  • hier mal die ersten 10:

    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(58) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'HINTERNET'
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(58) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(58) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(59) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(59) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(59) : error C2378: 'HINTERNET': Neudefinition; Symbol kann nicht mit typedef überladen werden
    1> c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(58): Siehe Deklaration von 'HINTERNET'
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(59) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(61) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'INTERNET_PORT'
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(61) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\programme\microsoft sdks\windows\v6.0a\include\wininet.h(61) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

    mfg,
    andi01.



  • naja, letztlich is es ja eigentlich egal, der code von lagalopex funktioniert ja. wäre bloß mal interessant zu wissen woher all diese fehler kamen.

    mfg,
    andi01.



  • vielleicht klappt es wenn du #include <windows.h> über bzw. unter #include <winsock2.h> schreibst (einfach mal ändern)



  • hatte ich auch schon erfolglos probiert 😞 .
    ich weiß wirklich nicht woran das mit den fehlern lag...

    jedenfalls schonmal danke für die bisherigen antworten 🙂 .

    wäre trotzdem schön wenn mir noch jemand erklären könnte woher die fehler kamen.

    mfg,
    andi01.



  • bei mir zickt die "winsock2.h" auch rum, nimm mal:

    #include <winsock.h>
    #include <wininet.h>
    


  • danke, jetzt hat auch der alte code mit den vielen fehlern funktioniert 🙂 . damit ist das problem gelöst.

    danke für die ganzen antworten,
    andi01.


Anmelden zum Antworten