Richtige IP-Adresse auswählen



  • Hallo @all,

    ich habe folgendes Problem:
    Auf meinem Rechner soll ein Server laufen und andere Clients sollen sich mit diesem Verbinden können. Grundsätzlich ist dies kein Problem, jedoch habe ich mein Server nur mit lokalen Clients getestet (also IP = 127.0.0.1).
    Um mich als externer Rechner mit meinem Server verbinden zu können, benötige ich die "richtige" IP-Adresse.

    Mit folgender Funktion:

    int IP_Adresse()
    	{
    		char ac[80];
    		if( gethostname( ac , sizeof( ac ) ) == SOCKET_ERROR )
    		{
    			// Fehler Behandlung
    		}
    
    		struct hostent *phe = gethostbyname( ac );
    		if( !phe )
    		{
    			// Fehler Behandlung
    		}
    
    		struct in_addr addr;
    		memcpy( &addr , phe->h_addr_list[0] , sizeof( struct in_addr ) );
    		std::cout << inet_ntoa( addr );
    	}
    

    Soll man sich laut Google, seine IP-Adresse ausgeben lassen können.
    Wenn ich die Funktion aufrufe erhalte ich folgende IP-Adresse: 192.168.XXX.XXX .

    Jetzt ist die Frage, ist das die notwendige IP-Adresse? Weil, ich glaube, dass 192.168. ... für LAN Adressierung reserviert ist, ich bräuchte also die IP-Adresse meines Routers oder so ^^



  • Du sitzt sicher hinter einem Router. Wenn du jetzt von außen (übers Internet) auf deinen Rechner zugreifen willst, musst du nicht nur die externe IP wissen, sondern auch den entsprechenden Port vom Router aus an deinen Rechner dahinter weiterleiten lassen. Das nennt sich Port-Forwarding.

    Die externe IP bekommst du z.B. durch http://www.show-my-ip.de



  • Ah ok, wenn ich das richtig verstehe brauche ich also sowas wie upnp, um bei meinem Router eine Weiterleitung zu aktivieren?



  • Das wäre etwas, was der Server machen würde, um die Weiterleitung zu aktivieren. Würd ich erst gar nicht versuchen, sondern die Konfiguration dem Benutzer überlassen. Die meisten haben UPNP sowieso deaktiviert, ist ziemlich unsicher.
    Genauso muss halt auch der Benutzer die richtige IP selber rausfinden.



  • Hm...
    Klingt nicht erfreulich .
    Das Problem ist, dass heutzutage ja quasi jeder hinter einem Router sitzt, weshalb ich nicht drumrumkommen werde :S

    Also zum Programm: Vom Verbindungstechnischen Blickwinkel soll es ähnlich wie TeamViewer arbeiten, d.h. 2 Leute auf der Welt, sollen sich verbinden können, ohne dass es einen dritten gibt, welcher als Server fungiert. TeamViewer hat doch dafür eine Nutzerfreundliche Lösung gefunden, ohne dass der User erst 100 Dinge bei seinem Router einstellen muss. Oder arbeitet TeamViewer auch mit nem Server, wo sich das Paar als Cleints anmelden?



  • shft schrieb:

    Hm...
    Klingt nicht erfreulich .
    Das Problem ist, dass heutzutage ja quasi jeder hinter einem Router sitzt, weshalb ich nicht drumrumkommen werde :S

    Also zum Programm: Vom Verbindungstechnischen Blickwinkel soll es ähnlich wie TeamViewer arbeiten, d.h. 2 Leute auf der Welt, sollen sich verbinden können, ohne dass es einen dritten gibt, welcher als Server fungiert. TeamViewer hat doch dafür eine Nutzerfreundliche Lösung gefunden, ohne dass der User erst 100 Dinge bei seinem Router einstellen muss. Oder arbeitet TeamViewer auch mit nem Server, wo sich das Paar als Cleints anmelden?

    Edit: Habs nachgelesen: TeamViewer scheint doch mit nem Server zuarbeiten :-S

    Scheint wohl einfacher zu sein, als sich Ports weiterleiten zu lassen, was womöglich auch noch bei vielen Routern grundsätzlich erstmal gesperrt sein wird



  • Es gibt eine Technik, die heißt UDP Hole Punching. Bin mir jetzt nicht mehr sicher, aber ich glaub, Skype funktioniert so. Du brauchst dann zwar einen Server, um die Kommunikation zu initiieren, aber dann reden die zwei Clients direkt miteinander, ohne Server.



  • Ok,danke euch 🙂


Log in to reply