Sockets - Verbindung zu anderem Rechner



  • Moin moin,

    ich hatte grade so eine Idee, weiß aber nicht ganz genau wie das umzusetzen ist. Ist nichts besonderes fänd ich aber zur Abwechslung mal ganz interesannt.

    Ich hatte mir gedacht ich programmier - ganz einfach in der Konsole - eine Art Telefonbuch, man kann Nummern mit dem zugehörigen Namen usw eintragen und abfrage. Bis hierher alles gar kein Problem. Nun dachte ich mir aber es wäre ja ganz praktisch, wenn ich diese Anwedungs offen lasse und über Sockets von einer anderen Anwedung darauf zugreifen kann um Datensätze einzufügen oder nur auszulesen. Selbst das stellt soweit kein Problem dar ich wollte nur meine Idee schildern. Nun kann ich allerdings da die Anwedung ja eine fixed IP braucht um über Sockets zu verbinden dieses nur so nutzen wenn beide Anwedungen auf dem gleichen PC laufen oder vielleicht auch bloß auf einem PC im gleichen Netzwerk. Wie kann ich es nun also machen das ich von einem entfernten, total unabhängigen Rechner darauf zugreifen kann? Ich dachte mir den Client des Programmes könnte ich dann ja per USB Stick auf einem anderen Rechner starten. Nur wie gesagt, das Verbinden stellt für mich ein Problem dar.

    Ich hoffe hier kann mir jemand dabei helfen! Danke schon mal im Vorraus 🙂



  • Das ist jetzt kein spezielles Problem von DOS oder Windows.

    Die Stichworte wären DynDNS und NAT.

    Wenn dein Server hinter einer Fritz!Box hängt, so hat AVM dafür schon alles vorbereitet und gut dokumentiert.

    Wenn dein Server in einem Mobilfunknetz hägt sieht es sehr schlecht aus.



  • Also Mein PC in dem Fall der Server hängt hinter einer FritzBox, ich weiß auch nicht genau wie du das meinst das der hinter einem Mobilfunknetz hängt.
    Naja ich habe mir nun auf dieser Seite www.dnsdynamic.org einen Account erstellt und einen Server mit einer fixed IP erstellt. Gibt es nun irgendwas wichtiges das ich beachten muss? Ansonsten bastel ich mir nachher die Sockets zu dem Programm und versuche irgendwie mit der Hilfe von Google und diesem Account den ich mir da grade erstellt habe die beiden Anwendungen zu verbinden.



  • Du hast da keine fixe IP-Adress.
    Du bist dann über einen Namen erreichbar. Die Verbindung zwischen Namen und Ip-Adresse macht der dnsdynamic.
    Wenn die Fritz!Box diesen Anbieter unterstützt, kannst du die Anmeldeinformationen direkt in der Fritzbox hinterlegen.
    Dann wird jedesmal bei einer Neuverbindung (in der Regel Nachts) auch die IP-Adresse aktualisiert.

    Dein Internetname ist dann sowas wie WildChild.dnsdynamic.org (Ich weiß nicht ob das bei diesem Anbieter so ist.)

    Du musst dann noch in der Fritz!Box eine Portweiterleitung auf deinen PC machen.
    Stichwort NAT.

    Dann kannst du auf deinen Rechner mit WildChild.dnsdynamic.org:4711 zugreifen. (Du nimmst natürlich deine Daten und für 4711 deine Portnummer)

    WildChild schrieb:

    .. ich weiß auch nicht genau wie du das meinst das der hinter einem Mobilfunknetz hängt.

    Z.B. bei einem UTMS-Stick oder Teathering mit dem Smartphone.



  • Ah okay die Erklärung ist sogar für mich einfach genug 😉
    Aber es muss doch einen unabhängigeren Weg geben?! Ich kann nun zB nicht an unserem Router rumspielen da werden mir meine Mitbewohner und der Nachbar aber was erzählen..



  • WildChild schrieb:

    Aber es muss doch einen unabhängigeren Weg geben?!

    Wie lautet denn die IP-Adresse von deinem Rechner?
    Irgendetwas mit 10. oder 172. oder 192.168. vorneß

    Dann schau mal bei http://de.wikipedia.org/wiki/Private_IP-Adresse vorbei.

    Die Fritz!Boxen haben 192.168.178.x
    Diese Netze haben nach innen eben die privaten Adressen. Nach aussen hin haben sie aber eine öffentliche Adresse. Bei den meisten privaten Anschlüssen wechselt die IP-Adresse aber bei jedem reconnet (meist in der Nacht ~03:00).

    Wenn du dir mal überlegst, wie viele Fritz!Boxen es gibt, kannst du dir auch ausmalen wie viele Computer alleine dadurch die gleiche IP-Adresse haben wie dein Computer.

    Der Weg zu deinem Computer führt über den Router (daher hat er auch den Namen). Dem muss man mitteilen, wo die Verbindungen von außen hin sollen.

    Mit den Mitbewohnern kann man reden. Aber was hat der Nachbar damit zu tun?
    Nebenbei brauchen auch Spiele und Tauschbörsen dieses NAT.



  • Okay nun bin ich wieder ein bisschen überfordert, tut mir leid wenn ich hier nun irgendetwas falsch verstehe, aber ich verstell doch nichts am Router bevor ich ein Onlinespiel spiele oder etwas vergleichbares..



  • Du vielleicht nicht, die Spiel aber schon.
    Wenn es im Router aktiviert ist, können die Programme die Portfreigaben selbständig über UPnP aktivieren.

    Das ist aber nur notwendig, wenn von außen Kontakt zu deinem Rechner aufgenommen werden soll.
    Also wenn dein Rechner als Server arbeitet. Aber genau das willst du ja.



  • Achso also könnte ich die Änderungen am Router programmtechnisch vornehmen und das würde sich auch gar nicht weiter auf die anderen Personen, beispielsweise meine Mitbewohner auswirken? Kennst du denn irgendeine Seite auf der man etwas über speziell diese Programmierung nachlesen kann?



  • Ich kenne keine Seite. Das läuft aber unter UPnP.
    Aber als Einstieg geht wohl auch http://de.wikipedia.org/wiki/UPnP#Praktischer_Einsatz

    Wenn du das über UPnP machst, musst du als Programmierer aber auch wissen was du tust.
    Aber dann kannst du auch den Router auf sichere Art und Weise manuell freischalten.
    Aber für Beides fehlt dir im Moment das Wissen.

    Wichtig ist, das du NAT verstehst.



  • Hm.. Ok danke erstmal für die Links hab mir das grade mal kurz angeguckt und werde mir das morgen auch nochmal ordentlich durchlesen!
    Aber dennoch finde ich das alles etwas konfus.. Man findet zu diesem Thema jede Menge Theoretische Infos, Von der Theorie her kann ich mir nun glaube ich auch sehr gut vorstellen wie das funktionieren soll, aber man findet nicht das geringste darüber wie ich nun das ganz mit C++ abwickeln kann ohne manuell irgendwas am Router einzustellen.
    Ich mein klar ich lege die Sockets an verbinde zu der ip meines DynDNS Accounts oder beispielsweise auch direkt zu WildChild.dnsdynamic.og, alles recht verständlich und auch umsetzbar. Aber ich bezweifel das ich nun "auf eigene Faust" rausfinde wie ich allein über meine Anwendung, also über den Server, den Router sagen kann über welche IP er nun auch erreichbar ist und über welchen Port. Also die IP und den Port von dem DynDNS Server.



  • Dem Router musst du gar nicht mitteilen, über welche IP er erreichbar ist. Das weiss er selber am Besten.

    Du musst dem DynDNS-Server mitteilen, welche IP-Adresse dein Router aktuell hat. Dafür gibt es Programme von den DynDNS-Anbietern die das auch beim einschalten vom Rechner machen.
    Die Fritz!Box kann das aber auch für dich erledigen (einmalige manuelle Einrichtung über die Weboberfläche).
    DynDNS vermittelt nur die IP-Adresse zu deinem Router.

    Den Port bestimmst du für deinen Server. Z.B 4711.

    Jetzt muss die Fritz!Box nur noch wissen, welchen Port von Aussen sie zu welchem Port nach Innen weiterleiten soll.
    Das kann wieder 4711 sein oder auch ein anderer.
    Leite Port 47110 weiter zu WildChildsRechner:4711

    Die Fritz!Box macht das DNS für ihr Heimnetz und kennt auch die Namen von den Computern innerhalb des internen Netzes.

    Zu den ganzen Protokollen gibt es die RFC. Dort steht eigentlich alles drin.
    Welche jetzt UPnP für Router beschreiben weiß ich nicht.



  • Hm.. Ok ich denke das habe ich verstanden.
    Ich habe nun grade mal angefangen zu Programmieren.. ein Server und ein Client sind fertig funktionieren auch soweit, jedenfalls wenn ich den Client nach einem Server auf 127.0.0.1 suchen lasse.
    Wenn ich nun aber z.B.

    addr.sin_addr.s_addr = inet_addr("inv151673.dnsdynamic.com");
    

    da nach einem Server suche findet er nichts. Ich habe aber nun auf meinem Rechner das Programm WinDNSdynamic am laufen und das ist soweit ich weiß auch mit den Account da verbunden.
    Ich nehme mal an das Problem ist einfach das der jeweilige Port nicht offen ist kann das sein?



  • WildChild schrieb:

    ...
    Wenn ich nun aber z.B.

    addr.sin_addr.s_addr = inet_addr("inv151673.dnsdynamic.com");
    

    da nach einem Server suche findet er nichts. Ich habe aber nun auf meinem Rechner das Programm WinDNSdynamic am laufen und das ist soweit ich weiß auch mit den Account da verbunden.
    Ich nehme mal an das Problem ist einfach das der jeweilige Port nicht offen ist kann das sein?

    Du kannst da auch "localhost" angeben. Klappt auch nicht.
    In diesem Fall liegt es daran, das inet_addr nur IP-Adressen umwandelt und keine DNS-Namen. Da brauchst du gethostbyname()
    Schau mal bei zotteljedi vorbei. (In der Navigation Auf Grundfunktionen klicken)
    Natürlich ist der ganze Rest auch interessant.

    Deine lokale IP-Adresse und deinen lokalen Hostname bekommst du in der Konsole mit ipconfig /all
    Um deine externe IP-Adresse zu ermitteln kannst du mal http://www.ip-adresse-ermitteln.de/ probieren.



  • Achso ja ok stimmt mein Fehler im Quelltext steht da die ip und mit gethostbyname() hab ich es auch schon probiert!



  • Hm.. Ich kriege das immer noch nicht so zum laufen wie es das sollte! Wenn ich zu 127.0.0.1 connecte läuft alles glatt aber wenn ich zu der IP des DynDNS Servers connencte funktioniert das nicht.. Könnte mir mal jemand weiterhelfen? MfG WildChild 😉



  • Mit der IP des DynDNS-Servers kannst du nicht viel anfangen, denn du willst ja die IP von deinem Rechner haben.

    Du fragst bei dem DynDNS-Server nach, welche IP zu dem DynDNS-Namen "inv151673.dnsdynamic.com" gehört.
    Du kannst die aktuelle Adresse auch von verschiedenen Webseiten erfahren, z.B. http://www.heise.de/netze/tools/meine-ip-adresse/

    Hast du auch schon den Port in der Fritz!Box weitergeleitet?



  • Ja die IP von dem DynDNS Server sntspricht schon der meines PCs.
    Es geht doch auf 127.0.0.1 auch ... Das verstehe ich dann nicht



  • 127.0.0.1 geht gar nicht über das Netzwerk, da es immer der Rechner ist, von dem die IP aufgerufen wird (localhost).

    Dann hat dein Rechner noch eine lokale Adresse 192.168.178.x (hinter der Fritz!Box)
    Hast du die schon mal probiert?

    Die Adresse, die der DynDNS-Server liefert ist die externe Adresse von der Fritz!Box.
    Du wirst feststellen, das dies eine andere Adresse ist als 192.....

    Welche Portweiterleitung hast du jetzt in der Fritz!Box eingerichtet?



  • Ich habe überhaupt keine Portweiterleitung eingerichtet ich will ja nicht jedes Mal wenn ich das Programm an einem anderen PC nutze den Kram in die FrotzBox eintragen müssen. Eigentlich sollte das alles vom Programm ausgehen.