Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

1

18.04.2009, 10:12

Portsperren umgehen?

Hallo,
Ich habe mir grade einen kleinen online Highscore für mein Spiel geschrieben, mit kleinem Server, der die Anfragen/Highscores verwaltet.
Es hat ziemlich schnell funktioniert, dass ich einen neuen Highscore verschicke, und der Server diesen in die Liste übernimmt... allerdings habe ich es einfach nicht hinbekommen etwas vom server zum client zu schicken... nach etlichen Stunden habe ich dann die Idee gehabt, dass es vielleicht nicht an meinem Programm, sondern an irgendeiner Firewall oder so liegen könnte und habe daraufhin den Port auf Modem/Router freigeschaltet und es hat auf Anhieb funktioniert... :roll:
Da das allerdings der einzige Port ist, frage ich mich natürlich, wieso ich mit Firefox z.B. hier ins Forum komme, oder WoW usw. auch ohne Portfreigabe funktionieren. Ich habe sogar als Clientport port 80 getestet, weil ich dachte, der wäre vielleicht standardmäßig offen... hat aber auch nicht funktioniert.
Also meine Frage, wie funktioniert das bei WoW, Firefox und allen anderen Programmen (bis auf meinem....)?

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

18.04.2009, 10:33

Dein Programm ist ein Server, die Programme die du beschreibst sind Clients ;) Soviel also schonmal zum grundlegenden Unterschied.

Zu deinem Problem: Ohne Port Forwarding geht da garnix. Woher soll denn der Router wissen, an welchen Rechner im Netzwerk er Pakete für Port X durchstellen soll?

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

3

18.04.2009, 10:52

naja, also ich habe einen server geschrieben, der auf einem vserver läuft und einen client, eben das spiel, der bei mir auf dem rechner läuft... im prinzip ja nix anderes als ein www-server und firefox... ^^
Aber es müssen ja trotzdem beide packete verschicken und empfangen können, und das Empfangen hat beim client nicht funktioniert.
Was das Port forwarding angeht, könntest du natürlich recht haben... aber wieso wissen WoW-Packete auf welchen rechner im netzwerk sie geschickt werden müssen?

Anonymous

unregistriert

4

18.04.2009, 10:55

n0_0ne
Meistens werden Ports von Anwendungen genommen, die sowieso Standardmäßig offen sind. z. B. Port 80 oder 21. Da Packt ein Portblocker nicht mehr sondern nur noch ein Application-Filter.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

5

20.04.2009, 09:38

Re: Portsperren umgehen?

Zitat von »"n0_0ne"«


Da das allerdings der einzige Port ist, frage ich mich natürlich, wieso ich mit Firefox z.B. hier ins Forum komme, oder WoW usw. auch ohne Portfreigabe funktionieren. Ich habe sogar als Clientport port 80 getestet, weil ich dachte, der wäre vielleicht standardmäßig offen... hat aber auch nicht funktioniert.
Also meine Frage, wie funktioniert das bei WoW, Firefox und allen anderen Programmen (bis auf meinem....)?

Der Unterschied ist eigentlich ganz simpel. Bei Firefox und co baut der Client die (TCP) Verbindung auf. Wenn die einmal aufgebaut ist kann der Server natürlich auch antworten.

Eine Verbindung vom Server aus zu initiieren ist meist etwas schwierig, vor allem wenn Router dazwischen sind (Woher soll z.B. dein Router zu Hause wissen ob sich der Server zu deinem PC oder zu dem deines Bruders verbinden will.

Daher ist es wirklich am einfachsten den Client zum Server zu Verbinden und die Verbindung zu halten. So lange kann der Server dann ja auch Daten zum Client schicken.

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

6

20.04.2009, 13:10

Naja, im prinzip hat der client sich ja auch verbunden... also er hat ein UDP paket geschickt, und der server dann mit einem UDP paket geantwortet... aber es war eben keine richtige TCP verbindung vorhanden...
ich muss es mal mit einer richtigen TCP verbindung testen... thx für die erklärung :)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

7

22.04.2009, 10:19

Für UDP gibt es da noch das sog. hole punching. Ich habe es nie benutzt, aber vielleicht hilft dir der Wikipedia Artikel dabei:
http://en.wikipedia.org/wiki/UDP_hole_punching

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

22.04.2009, 11:39

Aber auch dafür brauchst du einen Server der erreichbar von beiden Seiten ist. Der Trick ist, dass man sich die temporär Portöffnung von UDP Ports für die clientseitige Kommunikation missbraucht. Um allerdings das ganze "abzusprechen" braucht man meines Wissens nach einen dritten Rechner, der als Server schon erreichbar ist. Generell denke ich, dass viele UDP unnötig missbrauchen. Es gibt Anwendungsfälle bzw. Netzwerkmodelle, wo UDP klare Vorteile hat. Aber die meisten sollten doch TCP mit den richtigen Einstellungen nutzen. Zu dem Thema auch nochmal ein kleiner Vergleich, der zeigt, dass eine TCP-lib durchaus auch im Allgemeinen (also nicht nur Spezialfälle) den den UDP-libs nicht nachsteht: https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=10036
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige