Netzwerk Programmierung
-
Ich hab ein kleines Spiel in C# programmiert. Jetzt will einen Multiplayermodus über das Internet hinzufügen. Da ich überhaupt keine Ahnung von der Sache hatte, hab ich mich mit Hilfe von Google und MSDN etwas schlauer gemacht. Immerhin weiss ich jetzt wie ich eine Tcp-Verbindung aufbaue und darüber Bytes verschicken kann, scheint nicht so sonderlich schwierig zu sein. Erste Experimente damit in meinem Lokalen Netzwerk haben gezeigt, dass die Bytes am anderen Rechner ankommen. Udp hat auch funktioniert.
Mir ist allerdings eingefallen, dass ich nicht direkt mit dem Internet verbunden bin, sondern dass noch ein Router dazwischen steckt. Was heißt das jetzt für mich? Inwiefern schränkt mich der Router ein, was muss ich beachten?
Bytes über das Netzwerk zu schicken ist natürlich nur die eine Sache. Ich muss mir überlegen was ich verschicke, aber ich bin mir sicher, mir fällt da irgendwas ein. Allerdings muss ich mein Spiel dann auch irgendwie Testen. Da das ganze sehr Zeitkritisch ist muss, das was in Meinem Lokalen Netzwerk funktioniert nicht unbedingt auch über das Internet funktionieren. Gibt es irgendein Programm das in meinem Lokalen Netzwerk eine schlechte Verbindung, wie sie im Internet üblich ist, simuliert?
-
hallo,
der router bedeutet, dass du zwar auf addressen von außen zugreifen kannst, aber
keiner auf deinen pc.
um das zu umgehen kannst du im router nach port-forwarding suchen, und dort einen port für eine ip freischalten.
technisch heißt das, dass jedes paket von der angegeben ip an dem angegben port
zu einer ip im subnetz (dein pc) weitergeleitet wird.damit das aber klappt brauchst du eine statische ip (http://www.dyndns.com/ ist ganz gut)
um eine verzögerung zu simulieren weiß ich jetzt nichts, aber du kannst vor jedem recv oder recvfrom ein sleep einbauen was das warten auf die daten simuliert
-
helferlein schrieb:
hallo,
der router bedeutet, dass du zwar auf addressen von außen zugreifen kannst, aber
keiner auf deinen pc.Hmm und was heisst das für mich Beim Programmieren genau? Ich denke Mal der Router hat überhaupt kein Problem damit Daten die ich verschicke ins Internet weiterzuleiten. Umgekehrt hat er aber Probleme damit herauszufinden an welchen PC er die Daten weiterleiten muss. Aber irgendwie muss er das ja in manchen Fällen herausfinden können.
Klar mit port-forwarding kann ich im das direkt sagen, aber das ist nur eine Notlösung auf die ich möglichst verzichten will.
-
Effektiv bedeutet das für dich dass du dich mit Netzwerktechnik auseinander setzen solltest wenn du in der Richtung was programmieren willst.
Angenommen du hast 2 PCs die beide hinter einem Router (mit NAT) stehen, und du willst zwischen denen eine Verbindung aufbauen, dann geht das nicht solange nicht auf wenigstens einer Seite eine sog. "Portfreigabe" gemacht wurde.
Mit UDP sieht es wieder etwas anders aus, aber um da etwas selbst auf der Basis von UDP zu implementieren müsstest du noch *einiges* lernen.
-
Wie sieht es aus, wenn nur ein Rechner hinter einem Router steht? Was geht und was nicht?
-
Wenn nur ein Rechner hinter einem Router ist dann kann der Rechner hinter dem Router kontakt aufnehmen.
Somit kein Problem. Dein Router weiß ja wo er die Daten wieder lokal hinleiten soll.
Sobals man aus einem lokalen Netz über den Router eine Verbindung herstellt speicher der Router eine Routingtabelle. Die ausgehenden Packete werden ins INET geleitet und die Antowort auf die Ausgehenden dann wieder über den Router zum lokalen Rechner. Portforward braucht man nur für den ersten Verbindungsaufbau. Sobald der Socket steht läuft alles alleine ab.
-
Eine Routingtabelle ist eigentlich was anderes. Was passiert ist dass ein Eintrag in den NAT Tables gemacht wird. GetNATet und geroutet wird normalerweise voneinander unabhängig.
Ist aber auch egal, wichtig ist nur zu wissen dass nur der Aufbau der Verbindung betroffen ist, wenn diese mal steht können dann Daten in beide Richtungen fliessen.