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

equinox

Frischling

  • »equinox« ist der Autor dieses Themas

Beiträge: 56

Beruf: Student

  • Private Nachricht senden

1

11.04.2016, 20:30

Gameserver und Internet

Guten Abend,

ich arbeite seit einiger Zeit an einem privaten Mehrspielerprojekt und habe eine Frage bezüglich des Spielens über das Internet.

Geplant ist, dass sich Spieler über einen zentralen Vermittlungserver ein offenes Mehrspielerspiel suchen können und diesem beitreten können.
Dieser Server soll natürlich auf dem Computer des Hosts laufen und nicht auf dem Vermittlungsserver.
Und genau hier stellt sich mir die Frage, ob ich dort das sogenannte Hole Punching anwenden muss, oder ob es andere Lösungen gibt.
Das Problem mit Hole Punching ist, dass obwohl ich schon ausgiebig recherchiert habe, keine anständige Beschreibung gefunden habe, bzw eine Anleitung wie ich dieses Umsetze.
Da habe ich mir gedacht, warum nicht einfach mal hier im Forum nachfragen ob mir jemand weiter helfen kann.

Sollte das so nicht weiter führen, kann ich bei Bedarf natürlich gerne meinen Lösungversuch präsentieren.

Grüße,
Equinox

Edit: Habe gerade gemerkt, dass ich im falschen Unterforum gepostet habe, könnte das vielleicht ein Moderator in den Netzwerkbereich verschieben?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

11.04.2016, 22:50

Ehe du versuchst das Rad neu zu erfinden. Mit was arbeitest du denn? Einer Netzwerk Bibliothek? Einer Spielebibliothek? UDP/TCP/ganzwasanderesjadagibteswirklichnochmehr?
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.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

12.04.2016, 03:30

UPNP (für Universal Plug'n'Play) sollte da ein geeignetes Stichwort sein. Ich habe mir sagen lassen, dass es sich dabei um eine SOAP-Schnittstelle handelt. (Abhängig von der Implementierung bekommt man einen Port zugewiesen, kann einen gewünschten Port angeben, oder muss einen Port angeben.) Um entsprechende Netzwerkgeräte zu finden, gibt es wohl ein Discovery Protokoll, allerdings habe ich mich noch nicht ausreichend damit beschäftigt.
Für Mono (und .Net) hatte ich mal Mono.Nat gefunden. Den Klassen und Methoden nach scheint es durchaus geeignet zu sein. Für die von dir verwendete Sprache gibt es wahrscheinlich auch entsprechende Implementierungen.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

4

12.04.2016, 10:58

Du könntest die Daten über den Vermittlungsserver verteilen. D.h. der Spielserver sendet diese zum Vermittlungsserver und dieser verteilt diese an die Spielteilnehmer. Die Spieleingaben nehmen dann den umgekehrten Weg.
Damit sparst du dir solche Späße wie Hole Punching.

equinox

Frischling

  • »equinox« ist der Autor dieses Themas

Beiträge: 56

Beruf: Student

  • Private Nachricht senden

5

12.04.2016, 11:19

Ich bedanke mich schonmal für die Antworten, ich programmiere in Java und benutze Kryonet. Die Eingaben über den Vermittlungserver laufen zu lassen wäre für mich höchstens eine temporäre Lösung.

@Sacaldur
Das mit UPNP muss ich mir mal angucken, danke schon mal :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

12.04.2016, 11:45

Ich selbst habe noch keine Erfahrung mit UPNP gemacht. Wäre ganz interessant zu wissen wie aufwändig es damit ist :) .
Falls es mit UPNP nicht klappt/du lieber Löcher von "Hand" stanzen willst:
Wenn du bei Kryonet TCP verwendest, ist ein NAT Punch through nicht trivial. Bei UDP ist es schon einfacher und es gibt einige Bibs, die das von Haus aus unterstützen-z.B. könntest du vom reinen Ablauf bei Raknet spicken gehen. Bist du ansonsten schon auf das hier gestoßen http://stackoverflow.com/questions/24461…ough-in-android ?
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.

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

7

12.04.2016, 14:40

Soweit ich es verstanden habe dient UPNP zum Programm-gesteuerten Manipulieren von bspw. Firewalleinstellungen in einem Router. Ich würde davon ausgehen, dass die meisten diese Funktion deaktiviert haben. Ansonsten bleibt wohl nur das Hole-Punching.
Ganz Old-School könnte man in die Anleitung zu einem Spiel ja auch schreiben, dass bestimmte Ports für eingehende Verbindungen geöffnet sein müssen. So hat es anno dazumals auch C&C gemacht.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

12.04.2016, 16:13

Nur leider gibt es mittlerweile nicht mehr nur IPv4. Ich bin z.B. bei Unitymedia und die erlauben kein Bereitstellen von IPv4 Diensten mehr (sprich es gibt bei deren Router schlicht kein NAT mehr).
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.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nox« (12.04.2016, 16:20)


Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

9

12.04.2016, 23:40

Das Grundprinzip ist in etwa so:

- Dein Server läuft auf irgendeiner Maschine.
- Diese Maschine hat eine IP-Adresse.
- Du entwickelst für Dein Spiel als Erstes ein schlichtes Eingabefenster, in dem man die Ziel-IP eingibt, um einem Server beizutreten.

Nächste Entwicklungsstufe:
- Es gibt einen von Dir als Entwickler bereitgestellten Zentralserver
- Alle Server melden sich mit ihrer IP und ihren Parametern bei diesem Zentralserver an.
- Jeder Client schickt eine Anfrage mit den Filterparametern an diesen Zentralserver und bekommt eine Liste mit IP-Adressen zurück
- Der Spieler wählt aus dieser Liste den Wunschserver aus oder ändert die Filterparameter.

Als Bedingung, damit überhaupt die erste Stufe funktioniert, muss der Client den Server erreichen können. Und das kann an vielen Dingen scheitern. Manchmal macht die User-Firewall bereits Späne auf dem Client-Rechner. Manchmal ist der Server ein privater Endnutzer-Rechner hinter einem Router. In diesem Fall brauchst Du NAT-Punchthrough. Manchmal hat der Router eigene Firewall-Regeln. Die kannst Du mit einem SOAP-Request ändern. Die CallOfDuty-Reihe macht das so, seit sie dedizierte Server abgeschafft haben.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

13.04.2016, 08:22

Ich würde davon ausgehen, dass die meisten diese Funktion deaktiviert haben.
Dann liegst Du falsch ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige