C++ MySQL



  • Hallo,
    ich versuche mit sockets über das Internet zu kommunizieren, da Broacasts nur im selben Subnetz funktionieren würde ich eine Datenbank nutzen.
    Wie kann ich denn mit C++ auf eine MySQL Datenbank zugreifen ?

    Oder weiß jemand von euch wie man sonst (gratis) andere Server/Hosts über das Internet findet (ohne die IP zu kennen)?

    Würde es überhaupt etwas nützen die IP zu kennen ?
    Es können ja mehrere PCs die IP 192.168.0.1 haben, oder nicht?



  • DarkShadow44 schrieb:

    Wie kann ich denn mit C++ auf eine MySQL Datenbank zugreifen ?

    http://tangentsoft.net/mysql++/



  • DarkShadow44 schrieb:

    Oder weiß jemand von euch wie man sonst (gratis) andere Server/Hosts über das Internet findet (ohne die IP zu kennen)?

    dyndns.org

    DarkShadow44 schrieb:

    Würde es überhaupt etwas nützen die IP zu kennen ?
    Es können ja mehrere PCs die IP 192.168.0.1 haben, oder nicht?

    Nein, natürlich nicht. Im Internet gibt es jede IP einmal. Das ist bei NATs (Router) die öffentliche IP. Was im Netz hinter dem Router abgeht, ist eine andere Frage. Das ist aber von außen unerheblich. Es kommt nur darauf an, dass der Router die eingehenden Pakete zum richtigen Rechner weiterleitet. Stichwort Port-Forwarding.



  • Was genau bringt http://www.dyndns.com/services/dns/dyndns/ ?

    Ich bräuchte eine kostenlose MYSQL Datenbank, (oder gleich einen Server) auf die alle User zugreifen könne.
    Das muss der Anbieter natürlich erlauben...

    Ftp wäre auch nicht schlecht ^^



  • Dein Provider hat mit dem Service hinterm NAT überhaupt nix zu tun.
    Wenn Du einen z.b. XAMPP (respektive LAMPP) Server aufsetzt musst Du wie genannt, darauf achten dass dein Router die entsprechenden Eingehenden (INBOUND) anfragen an deinen Server mit dementsprechenden PORTs weiterleitet. Der HTTP service läuft auf port 80 (normalerweise!!), wenn du z.b. auf deinem Server den HTTP service auf 2011 laufen hast, solltest du per Port forwarding (inbound) port 80 nach port 2011 (und lokale server ip) weiterleiten.

    Das gleiche gilt für deine SQL Datenbank.

    grüße



  • DarkShadow44 schrieb:

    Was genau bringt http://www.dyndns.com/services/dns/dyndns/ ?

    Ist das nicht ersichtlich?
    Du suchst dir eine Subdomain aus. Dann richtest du deinen Router ein, dass er sich jedesmal, wenn er eine neue IP vom ISP bekommt, dort meldet. Dann wird die IP ins DNS eingetragen und dein Router ist - solange er online ist - unter deiner gewählten Subdomain erreichbar.



  • @mad_martin: Die Datenbank soll aber auch verfügbar sein, wenn ich nicht online bin...

    @zeusosc:
    Und wie bekomme ich mit c++ (mit windows) die locale und die internet IP ?



  • DarkShadow44 schrieb:

    @mad_martin: Die Datenbank soll aber auch verfügbar sein, wenn ich nicht online bin...

    Dann brauchst du einen passenden Root- oder noch besser V-Server bei einem professionellen Anbieter, auf dem dann die Datenbank läuft. Gibt es schon für wenig Geld.



  • Für deinen Client oder für den service (host)???

    Also, wenn du beim dyndns eingetragen bist dann bekommst du die GLOBALE ip per gethostbyname, deine lokale ist als client relativ wurscht,.. da kannste any nehmen.

    Die lokale addy von deinem Server hinterm NAT solltest du in deinem OS relativ einfach auslesen können um das Port Forewording einzustellen, die lokale server addy ist dann für einen client übers i net so oder so net verfügbar (IPv6 mal ausgeschlossen) wenn der server hinterm NAT sitzt.

    Grüüße



  • I bräuchte beide IPs (lokal und internet) für lokalen Multiplayer und übers Internet...

    char szHostName[128] = "";
    
    if(::gethostname(szHostName, sizeof(szHostName)))
    {
      // Error handling -> call 'WSAGetLastError()'
    }
    
    // Get local IP addresses
    struct sockaddr_in SocketAddress;
    struct hostent     *pHost        = 0;
    
    pHost = ::gethostbyname(szHostName);
    if(!pHost)
    {
      // Error handling -> call 'WSAGetLastError()'
    }
    
      memcpy(&SocketAddress.sin_addr, pHost->h_addr_list[0], pHost->h_length);
      strcpy(LocalIP, inet_ntoa(SocketAddress.sin_addr));
    

    So bekomme ich eine IP, es gehen sogar mehrere, aber ich weiß nicht welche welche ist...

    Wisst ihr vielleicht, wo ich KOSTENLOS eine MySQL Datenbank im Internet bekomme (wenn möglich mit ftp für Dateien), der auch noch viel traffic (soll heißen viele Zugriffe auch von Dritten/Vierten) erlaubt ??



  • Ich bräuchte eine kostenlose MYSQL Datenbank, (oder gleich einen Server) auf die alle User zugreifen könne.

    Natürlich wird irgendein Anbieter so bescheuert sein und kostenlose SQL-Datenbank mit freigegebenem Zugriff von außerhalb erlauben damit Leute die CPU aufs Maximum quälen ohne dass es ihm irgendetwas bringt...

    Bei jedem Webhoster mit SQL kannst du davon ausgehen dass die Datenbank keine externen Verbindungen akzeptiert, halt gerade so dass PHP-Scripte laufen.

    Kleines Workaround:

    1. Du sucht dir einen Freehoster der PHP erlaubt und dir eine MySQL-DB anbietet
    2. Du legst eine PHP-Datei an die deine Datenbankzugriffe ausführt.
    3. Per HTTP-Request fütterst du über das Script die Datenbank



  • Ich kann kein PHP...
    Wie greift man mit c++ darauf zu ?

    Gibt es denn keine möglichkeit per Broadcast Hosts zu suchen ??

    Wäre besser für die Datenübertragung...



  • DarkShadow44 schrieb:

    Ich kann kein PHP...
    Wie greift man mit c++ darauf zu ?

    Dann lies dich kurz ein? Mit C++-Kenntnissen ist PHP ein Witz, zumindest die Syntax und viele Sprachelemente.

    Und auf was möchtest du mit C++ eigentlich zugreifen?
    Auf eine lokale MySQL-DB? MySQL++ , wie bereits gepostet.
    Auf eine externe DB? Viel Spaß beim implementieren.



  • Vielleicht erklärst du einfach nochmal genauer, als es bisher geschah, was du machen möchtest.
    Dann wird dir sicherlich eine passende Lösungsmöglichkeit vorgeschlagen werden.



  • Ich will ein (erst mal kleines) Multiplayer Spiel erstellen, dass man über das Internet spielen kann...

    Deshalb bräuchte ich eine öffentlich zugängliche Datenbank (MySQL), in die sich die Hosts eintragen und die Clients die Liste auslesen.

    Allerdings weiß ich noch nicht, wie man "kaputte" (im Sinne von abgestürzt und/oder eigenen Eintrag nicht gelöscht) Server löschen kann...



  • Sowas würde man niemals mit einer öffentlich zugänglichen Datenbank machen. Viel zu unsicher.
    Eher gibt es vor der Datenbank ein Serverprogramm, was die Liste verwaltet und als einziges Zugriff auf die Datenbank hat. Dorthin stellen die Clients ihre Anfrage und werden vom Server bedient.

    Die Einträge müssen von den Maschinen, auf die sie verweisen, regelmäßig aktualisiert werden. Sobald ein Eintrag mehr als beispielsweise 5 Minuten nicht aktualisiert wurde, wird er gelöscht. Ganz einfach.



  • Ich kann doch ein Passwort verwenden, es soll ja (erstmal ^^) Freeware sein.

    Die Hauptsache ist halt, dass es kostenlos gehen soll...

    Aber 5 min. lang ist für "tote" Host ganz schön lange.

    Anfangs wollte ich ja dauernd aktualisieren, und nach 1 sec löschen, aber der traffic wäre viel zu groß.

    Kann ich denn mit der MySQL-Server API auf Datenbanken im Internet zugreifen ?

    Muss MySQL-Server dafür auf jedem PC installiert sein ?

    Wie viel Traffic kann man einer öffentlichen Datenbank denn zumuten ?

    Und wo bekomme ich sie her ?

    Danke schon mal im Voraus ^^



  • DarkShadow44 schrieb:

    Kann ich denn mit der MySQL-Server API auf Datenbanken im Internet zugreifen ?
    Ja
    Muss MySQL-Server dafür auf jedem PC installiert sein ?
    Nein

    Danke schon mal im Voraus ^^

    Mit der Library die Ich im ersten post gepostet habe, kannst du mit max 5 linien zu deiner Datenbank eine verbindung herstellen.



  • Die 5 Minuten waren auch als Beispiel gedacht (für den geübten Leser an dem davor stehenden Wort "beispielsweise" zu erkennen).

    Aber eine kostenlose Datenbank zu finden, zu der du von außen(!) verbinden kannst, wird schwierig, wenn nicht unmöglich. Wurde auch schonmal erwähnt...


Log in to reply