Delphi-PRAXiS
Seite 1 von 3  1 23      

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr.
Seite 1 von 3  1 23      

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