Frage von DanielBepunkt, 73

wie kann ich eine verbindung von client und server über das internet herstellen?

Ok die Frage ist kompliziert. Ich habe auf einfachste Weise einen Server und einen Client in der Console mit c++ programmiert. Bzw einfach runter geladen und kompiliert. Hier der Link zu meinen beiden Originaldateien:

http://www.c-worker.ch/tuts/wstut_op.php

(Mann kann hier anscheinend nur einen Link angeben also die beiden Dateien finden sich ganz unten auf der Seite. Die Seite selbst erklärt des Weiteren den Aufbau des sehr einfachen Programms.)

Im Heimischen WLAN kann ich jetzt erst den Server starten, dann den Client und dann munter drauf los "chatten". Der client findet mühelos den server über die IP: 127.0.0.1 oder über "localhost". Jetzt meine frage. Ich habe auf einem anderen Rechner der mit einem völlig anderen Internetzugang und einer völlig andern IP im Internet unterwegs ist (also quasi irgendwer auf der Welt) den Client gestartet und zwar natürlich mit meiner IP. Aber sowohl die IP aus der ipconfig (also die interne IP) als auch die externe IP (meine hab ich von wieistmeineip) funktionieren kein Stück. Ich weiß nicht warum da keine Verbindung zustande kommt. Jedes normale dumme Spiel findet seinen Server, Skype, Firefox,.... alle können mich Problemlos anhand meiner IP identifizieren, nur der dämliche "client" nicht. Ich hoffe Ihr versteht mein Problem irgendwie. Danke im Vorraus.

Antwort
von n3kn2dhr, 51

Die Internetzugänge der meisten Haushalte werden vom heimischen Router vor dem Internet versteckt. Diese Funktion nennt sich NAT (Network Address Translation).

Dein PC zuhause hat neben der localhost-IP (127.0.0.1) noch eine weitere IP, z.B. 192.168.178.10. Das ist eine nicht-öffentliche IP.

Ein Packet, dass an einen Computer im Internet gehen soll, geht über den Router. Dieser tauscht die nicht-öffentliche Absenderadresse durch seine eigene IP-Adresse aus. Dieses ist die IP, die Du bei "wasistmeineip" angezeigt bekommst. Das ist die sogenannte öffentliche IP-Adresse.

Nehmen wir mal an, Dein Paket hat sein Ziel erreicht. Dann wird der Andere mit einem eigenen Paket antworten.

Das Antwortpaket geht dann also zurück an die öffentliche IP-Adresse. Diese Adresse gehört aber Deinem Router und nicht deinem PC. Der Router empfängt das Paket und fragt sich, was er damit machen soll. Weil nicht weiss, was er damit machen soll, verwirft er das Paket und es kommt nie an Deinem PC an.

Damit der Router weiss, was er mit Paketen machen soll, die an seiner eigenen IP-Adresse ankommen, kann man das sogenannte "Port-Forwarding" einschalten. Dabei sagt man dem Router: "Wenn ein Paket bei Dir am Port XY ankommt, dann leite dieses Paket an folgenden internen Computer weiter".

Du trägst also in Deinem Router einen Port ein, auf dem der Router lauschen soll, eine IP-Adresse von einem internen Computer (z.B. 192.168.178.10) und einem Port auf dem der interne Computer die Pakete erwartet.

Ab dann weiss der Router, was er mit Paken tun soll, die bei ihm (auf dem angegebenen Port) ankommen. Und dann klappt auch die Verbindung.


Kommentar von DanielBepunkt ,

Ach neeein!

Wie dumm man sein kann.

Ich danke SEHR. Ich bin zwar auch schon darauf gekommen, dass das zu empfangene Datenpaket in der FritzBox hängen bleibt, da ich aber einige gravierende Logikfehler im Hirn hatte blieb mir bis zuletzt die Lösung vorenthalten die Interne IP  mit der Externen IP zu koppeln, indem ich eine Portfreigabe in der FritzBox einrichte. Also ich habe jetzt versuchsweise Einen Port freigegeben. und es funktioniert wunderbar. Ich bin Online. Morgen erweitere ich meinen "Server" auf bis zu 128 Ports. Das sollte erstmal reichen. Natürlich werde ich diese Ports dann ebenfalls freigeben. Das werde ich wohl so schnell nie mehr vergessen.

Nochmal danke für die sehr schnelle Antwort. Das hat sehr geholfen.

Kommentar von thomasschaefer ,

Wenn Du schon lernst Server- und Clientprogramme zu schreiben, warum nimmt Du dann nicht gleich IPv6?

https://msdn.microsoft.com/de-de/library/windows/desktop/ms740506%28v=vs.85%29.a...

Kommentar von DanielBepunkt ,

Ja ich weiß ich habe das noch nicht wirklich drauf. Ist jetzt mein erster Server der tatsächlich läuft. Zumal ich solche Beispiele aus Foren o.ä. auch immer erst so kompiliere und wenn die dann funktionieren so lange verändere bis ich alles verstanden habe was da abgeht. Danach fange ich meistens an die Sachen komplett selbst neu zu bauen und zwar meistens eh in Header oder wenigstens in Funktionen. IPv6 wird laut meiner (eigentlich echt neuen) FritzBox nicht unterstützt,... kann ich mir zwar auch nicht erklären aber wenn mir das Prinzip dort komplett klar geworden ist werde ich mich damit noch mal auseinander setzen. Danke euch nochmal für die Antworten. Server läuft, hat 128 Ports, reagiert automatisch auf IP-Wechsel (Zwangstrennung usw.) und schreibt testweise eine Logdatei. Den "0ten" Port musste ich leider reservieren um Portnummern verschicken zu können.... Ja ich denk mir da noch was intelligenteres aus. Habe den Client heute an 4 Kollegen geschickt und alle haben sich im DOS-"Chat" auf meinem Server prächtig amüsiert. : )

Keine passende Antwort gefunden?

Fragen Sie die Community