Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Netzwerk (Lan ==> Internet) (https://www.delphipraxis.net/119958-netzwerk-lan-%3D%3D-internet.html)

olee 3. Sep 2008 18:25


Netzwerk (Lan ==> Internet)
 
Hi,

Ich möchte ein Spiel programmieren doch stehe ich vor einem etwas größeren Problem:

Ich habe es geschafft, eine Verbindung Lokal (LAN) herzustellen.

Doch ich hab einfach keine ahnung, wie ich das mit dem Internet hinbekommen kann.

Also es geht darum, dass ich ja, wenn ich per IP verbinde, der doch automatisch im lokalen
Netzwerk danach such.

Wie kann ich das denn nun auf das Internet ausweiten?

Über eine schnelle Antwort würde ich mich freuen (Will gleich auch noch weiterprogrammieren :-D)


MFG Björn

Die Muhkuh 3. Sep 2008 18:26

Re: Netzwerk (Lan ==> Internet)
 
Geht nur über direkte IP Eingabe oder Du hast einen Masterserver laufen, auf dem sich alle anderen Server anmelden und der Client empfängt dann die Serverliste vom Masterserver.

sirius 3. Sep 2008 18:28

Re: Netzwerk (Lan ==> Internet)
 
Du hast sicher eine TCP-Verbindung, oder wie machst du das?

Bedenke als erstes mögliche Router auf der Seite des Servers und das darin enthaltene NAT.

olee 3. Sep 2008 18:33

Re: Netzwerk (Lan ==> Internet)
 
Nein das ist nicht das Problem.

So wie du das gesagt hast, will ich das auch machen.

Nur ist meine Frage:

Wenn ich nun eine Server-Socket komponente habe.

Der gebe ich einen Port und lasse das auf irgendeinem Rechner irgendwo im Internet laufen.

Nun sitze ich an meinem PC, der nur über einen Router an das Internet angeschlossen ist.

Ich nehme einen Client-Socket und gebe dem einen Port und die IP des Server-Sockets.

Wird der dann nicht im Lokalen Netzwerk (also das mit dem Router / LAN) nach dem Server-Socket suchen und deshalb nicht finden?

oder wird der den auch im Internet suchen.

Oder noch mieser: Selbst der Server-Socket hängt am Internet nur über einen Router.

Dann könnten doch mein PC und der mit dem Server die gleiche IP haben, da sie nicht im gleichen Lan-Netzwerk sind!?

olee 3. Sep 2008 18:33

Re: Netzwerk (Lan ==> Internet)
 
Was ist gemeint mit NAT ??

EDIT: Hat auch vllt. einer mal ein Beispiel?
Eine fertige Anwendung (wenn jmd. so etwas schon gemacht hat) oder auch nur Code-Schnipsel wären klasse.

Zum Hintergrund meiner Frage: Ich programmiere eine Art Jump-And-Run-Rennspiel.
Nun will ich einen Master-Server haben, der die Liste aller Spiel-Server hat
und dann mehrere Spiele-Server, die wer will starten kann
und natürlich die Clients.

Isgesamt ist das also das Standard-System mit Multiplayer Spielen (wie UT, HL, usw.)

sirius 3. Sep 2008 18:41

Re: Netzwerk (Lan ==> Internet)
 
NAT=Network Address Translation
Normales/oft vorkommendes Beispiel:

Dein Server und Dein Client hängen in je einem LAN (mit nur einem oder mehreren Rechnern und je einem Router Richtung WAN)

Dadurch hat dein Server und dein client eine typsiche LAN-IP a la 192.168.1.1, vielleicht sogar beide die gleiche, sind ja in unterschiedlichen LAN.

Die jeweiligen Router haben im WAN natürlich auch eine IP (die sollte unterschiedlich sein) Jetzt schickt dein Client ein PAcket an 80.122.12.35 (was mal die Adresse des serverseitigen Routers im WAN ist) und dort an Port 2000. Der Clientseitige Router erkennt anhand der Adresse und der Subnetmaske gleich, dass das Paket ins Internet/WAN raus geht. Der macht also keine Zicken und schickt es problemlos weiter. Gleichzeitig merkt sich der NAT was wo und über welchen Port geschickt wurde (bei TCP) sodass eine Antwort an den richtigen Absender gelenkt werden kann und er ändert auch die AbsenderAdresse entsprechend vom LAN-Absender in einen WAN-Absender (aber egal)

Der serverseitige Router bekommt jetzt irgendwann das Paket. Der weiß aber nix damit anzufangen. Was soller auch mit einem Paket an Port 2000 machen. Und deswegen musst du ihm das vorher sagen. Dazu gibts die einträge im NAT. Da kannst du sagen, dass alle Pakete an Port 2000 automatisch nach 192.168.1.1 weitergeleitet werden und dort dann auch an Port 2000 oder einen anderen Port. Und dort hast du dein ServerProgramm laufen.


Soweit klar?



zum Edit: Du kannst alles so lassen, wie im LAN, du musst nur den serverseitigen Router oben genanntes mitteilen.

olee 3. Sep 2008 18:51

Re: Netzwerk (Lan ==> Internet)
 
Also das war schon mal klasse!

Also erst mal :dp: und VIELEN DANK :hello:


Aber noch etwas kleines: Wie genau mach ich das jetzt vom client aus, das ich dem Router
vom Server mitteile, wohin das Paket gehen soll?

EDIT: Genau dazu wäre wenn nötig ein leckeres Code-Schnipsel super :coder:

sirius 3. Sep 2008 18:54

Re: Netzwerk (Lan ==> Internet)
 
Das kannst du vom Client nicht. Und vom Server nur, wenn der Router eine entspr. API anbietet, was aber unwahrscheinlich ist.

Du musst wirklich einfach dem Router direkt Bescheid sagen, indem du ganz normal in dessen Einstellungen herumwerkelst.

Eine andere Möglichkeit hat die ja unser Kalb oben gepostet. Die beruht eben darauf, dass ein ständig verfügbarer Server zuerst angefragt wird. Den brauchst du aber dafür.

olee 3. Sep 2008 18:58

Re: Netzwerk (Lan ==> Internet)
 
Also diesmal drehe ich den Spieß um:

Der Server darf direkt am Internet hängen.

Nur wie sieht es jetzt mit der Verbindung vom client zum Spiel-Server
(oder wie mans auch nennen könnte Client-Server) aus?

Eine Idee die ich hab wäre, dass der Client erst eine Verbindungsanfrage an den Master-Server sendet und der
diese an den Game-Server weiterleitet ... aber dann?

Hat da nicht mal jemand so etwas gemacht und kann mir ein Beispiel anbieten oder auch nur ein wenig Code?

EDIT: Und bevor es noch jmd. erwähnt: Ich hab schon stunden in der DP gesucht.

sirius 3. Sep 2008 19:12

Re: Netzwerk (Lan ==> Internet)
 
Alle müssen sich beim Master Server anmelden.


Hier vielleicht noch etwas (habe ich selbst nie probiert):
Zitat:

Zitat von Sourcforge: nat-traverse
TECHNIQUE
nat-traverse establishes connections between hosts behind NAT gateways,
without need for reconfiguration of the involved NAT gateways.

1. Firstly, nat-traverse on host "left" sends garbage UDP packets to
the NAT gateway of "right". These packets are, of course, discarded
by the firewall.

2. Then "right"'s nat-traverse sends garbage UDP packets to the NAT
gateway of "left". These packets are *not* discarded, as "left"'s
NAT gateway thinks these packets are replies to the packets sent in
step 1!

3. "left"'s nat-traverse continues to send garbage packets to "right"'s
NAT gateway. These packets are now not dropped either, as the NAT
gateway thinks the packets are replies to the packets sent in step
2.

4. Finally, both hosts send an acknowledgement packet to signal
readiness. When these packets are received, the connection is
established and nat-traverse can either relay STDIN to the socket or
execute a program.

Edit: Wobei ich hier nicht verstehe: Was ist wenn "left NAT-Gateway" den Port ändert?

olee 3. Sep 2008 19:22

Re: Netzwerk (Lan ==> Internet)
 
Ja aber wie sieht das nun mit den Game-Servern aus?

Also das mit dem Master-Server ist jetzt alles OK (Dank dir :thumb: ^^)

Ich muss nur noch dafür sorgen, dass auch mit den Game Servern,
die manchmal bestimmet auch hinter einem Router hängen, eine Verbindung
aufgebaut werden kann.

Hast du dazu (leider mal) keine Idee? :cry:

olee 3. Sep 2008 19:52

Re: Netzwerk (Lan ==> Internet)
 
*push*

Need Help!

Es fehlt ja wiklich nicht mehr viel damit ich das hinbekommen kann.

Matze 3. Sep 2008 19:53

Re: Netzwerk (Lan ==> Internet)
 
Ich habe vorhin bereits deinen Beitrag in dem Thema ausgeblendet. Unterlasse umgehend diese Pusherei! :warn:

sirius 4. Sep 2008 07:54

Re: Netzwerk (Lan ==> Internet)
 
Zitat:

Zitat von olee
Hast du dazu (leider mal) keine Idee? :cry:

Habe ich noch nie gemacht. Mir fehlt dazu auch die Möglichkeit, da mir die verschiedenen Rechner im Netz fehlen :zwinker:
Auch in der DP habe ich bisher keine endgültige Lösung gesehen (habe aber auch nie danach gesucht). Ich glaube da musst du dich allein durchfuchsen und mal internetweit suchen.
Und wie gesagt, das Zitat oben soll angeblich ohne MasterServer funktionieren.

Thomas83 5. Sep 2008 11:00

Re: Netzwerk (Lan ==> Internet)
 
servus,

so wie ich das verstanden habe willst du einen Master Server laufen lassen.
Der hat immer einen "festen" Ort, das heist du kannst den Port etc fest am Router einstellen.
Die Game Server haben ja keinen "festen" ort bzw. ein User kann einen Server starten.

Demnach wird es etwas schwer da die Anfragen an einen Gameserver von der Firewall/Router geblockt werden. Dazu must du die Firewall aufbohren wie genau das geht kann ich dir leider nicht sagen.
Dazu gibt es aber Docus im net einfach mal nach googlen. Dafür gibt es auch einen Begriff, der ist mir aber leider entfallen.

mfg

Berlinermauer 5. Sep 2008 11:15

Re: Netzwerk (Lan ==> Internet)
 
Also:

entweder du machst es wie bei den css gameservern und alle xD :
Der Serverhoster muss einfach die Ports Freischalten, der MasterServer gibt dann nur die ip und den port weiter wenn der ping geht.
Dann: no-ip.com reggen, client laden, und schon hast du ne DNS(wenn sich ip ändert). Dann noch in der Router Firewall Freischalten.


zweitens (fast unmöglich):

Der Client verbindet sich zum MasterServer zu dem auch dein "GameServer" verbunden ist. Nun schickt der Client "Hello" an den Master Server und der an den Client zwei (Gameserver). das geht, nur muss dein Master Server sau stark sein und Traffic wie nochwas zu haben.
Das versenden der Dateien wird dann sehr kompliziert. Wie gesagt, mach nummer eins, die user sollten dann freischalten oder sich nen vserver/root holen


Edit: das nennt sich btw Port Forwarding (nummer eins)

Ein beispiel für zwei ist TeamViewer, hier brauchst du ja schließlich auch keine Ports freischalten, egal wer von euch beiden guckt

jfheins 5. Sep 2008 11:26

Re: Netzwerk (Lan ==> Internet)
 
Die bessere, dritte Möglichkeit wäre die oben beschriebene:

Beide "Spieler" verbinden zum Masterserver in eine Art "Lobby".
Wenn zwei miteinander spielen möchten, sendet der Client A dem Client B ein Paket, das wahrscheinlich von der Firewall von B geblockt wird. Dann schickt B ein Paket zu A. Dies sollte ankommen, das die Firewall von A dies als Antwort auf das gesendete Paket wertet. Jetzt nochmal von A ein Paket an B schicken, und die Verbindung steht.
Die Koordination kann ja über den Masterserver erfolgen (welcher Port, welche IP haben die beiden usw.) bis die direkte Verbindung hergestellt ist. Der eigentliche Traffic sollte natürlich direkt zwischen den Clients abgewickelt werden ...

Dann braucht man keine IP's umherschicken und auch keine Ports freischalten ;)

sirius 5. Sep 2008 11:31

Re: Netzwerk (Lan ==> Internet)
 
@jfheins: Ja, aber (ohne Erfahrung darin zu haben), was ist mit Routern welche NAPT betreiben (das waren meine Bedenken bei meinem Post). Dann kenne ich ja den Port nicht wenn ich von B auf A reagieren will. Der Router bei A hat ja evtl. den Port verändert. Und diesen kennt keiner (außer die Router).

olee 6. Sep 2008 17:25

Re: Netzwerk (Lan ==> Internet)
 
Also so wie ich das sehe wird das zu einem interessanten Thema.

Aber: Ich habe von jmd. gesagt bekommen, dass die Verbindung von A zu B nur so lange
"existiert" , wie Daten von A nach B übermittelt werden und B eine Antwort darauf schickt.

Heißt das dann nicht, dass man jedes mal, wenn man Daten übermitteln will, erst das
genannte Prinzip ausführen, um Daten von A nach B zu senden?

Immerhin soll das für ein Spiel sein (also Echtzeit).

jfheins 6. Sep 2008 18:15

Re: Netzwerk (Lan ==> Internet)
 
Zitat:

Zitat von sirius
@jfheins: Ja, aber (ohne Erfahrung darin zu haben), was ist mit Routern welche NAPT betreiben (das waren meine Bedenken bei meinem Post). Dann kenne ich ja den Port nicht wenn ich von B auf A reagieren will. Der Router bei A hat ja evtl. den Port verändert. Und diesen kennt keiner (außer die Router).

Hm .. stimmt ... dann muss man wohl doch Ports forwarden ... :-/

sirius 6. Sep 2008 20:02

Re: Netzwerk (Lan ==> Internet)
 
Zitat:

Zitat von jfheins
Hm .. stimmt ... dann muss man wohl doch Ports forwarden ... :-/

Schade. Ich hatte noch gehofft, du könntest mir widersprechen. :stupid:

Etwas anderes wäre noch, dass Router (weiß nicht, ob das generell so ist, oder eher die Ausnahme) können den Application Layer auch lesen, dadurch funktionieren z.B. FTP Verbindungen ohne Server. Vielleicht gibt es da bestimte Protokolle und/oder bestimmte Ports um ohne Server eine Verbindung aufzubauen. Du kannst ja mal probieren per FTP eine Verbindung aufzubauen.

jfheins 6. Sep 2008 21:34

Re: Netzwerk (Lan ==> Internet)
 
Zitat:

Zitat von sirius
Zitat:

Zitat von jfheins
Hm .. stimmt ... dann muss man wohl doch Ports forwarden ... :-/

Schade. Ich hatte noch gehofft, du könntest mir widersprechen. :stupid:

Ok, ich hab nochmal nachgelesen - ich kann dir widersprechen :mrgreen:

Ser allgemeine Fall ist hier unter Punkt 3.4 beschrieben ;)

Der Punkt ist folgender:

Zitat:

Zitat von sirius
@jfheins: Ja, aber (ohne Erfahrung darin zu haben), was ist mit Routern welche NAPT betreiben (das waren meine Bedenken bei meinem Post). Dann kenne ich ja den Port nicht wenn ich von B auf A reagieren will. Der Router bei A hat ja evtl. den Port verändert. Und diesen kennt keiner (außer die Router).

Das rot markierte ist nämlich Falsch :P

Konkretsteht da: (übersetzt) Wenn die NAT korrekt programmiert ist, dann hat sie auch das Paket an B, dass A verschickt, mit dem gelichen Absender (alöso auch dem gleichen Port) zu versehen, wie die Kommunikation zum Server. Der Server wiederrum, kennt diesen Port, und kann ihn B weitersagen.

Beipiel ist ja in dem verlinkten Dokument ;)

Weiter unten (Abschnitt 4) wird auch noch TCP behandelt ;)

Edit: Zumindest bei den meisten Geräten :roll: siehe Tabelle 6.2 :?

Berlinermauer 6. Sep 2008 21:49

Re: Netzwerk (Lan ==> Internet)
 
das wird hier wohl zu kompliziert ^^ er sollte einfach ports freischalten^^.


Zitat:

Zitat von olee
Heißt das dann nicht, dass man jedes mal, wenn man Daten übermitteln will, erst das
genannte Prinzip ausführen, um Daten von A nach B zu senden?

Sende dann doch einfach ein "NOP" Signal, also ein "ping" einfach um die Verbindung aufrecht zu erhalten, aber das wird hier sehr komplex.

Wenn man dein Spiel ordentlich zocken will, sollte man eh nen server mieten wegen Anbindung und so :stupid:

olee 7. Sep 2008 22:35

Re: Netzwerk (Lan ==> Internet)
 
gut

dann sehe ich jetzt mal meine eigentliche Frage als

:thumb: :stupid: BEATWORTET :stupid: :thumb:

Ich hab auch glücklicherweise einen Server bei mir zu hause stehen, der "direkt" am
Internet angeschlossen ist :lol:

Also werde ich dann meinen ersten Testserver (der masterserver) wohl da drauf laufen lassen müssen.

Und für den Game-Server als test lasse ich mir dann eben Ports freischalten.

Vielen dank nochmal für das interessante thema und die ausführlichen Antworten von euch.

Ihr wart ein klasse Publikum ^^


MFG Björn


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz