"Lobby"-Server

al3xh

Grünschnabel
Hi,

da mein IT-Projekt(4-Gewinnt) soweit fertig ist, möchte ich zusätzlich das Spiel übers Netzwerk integrieren.
Ich hab mir nun gedacht, das es einen Server gibt(Server-Applet) auf den man connecten kann und man bekommt im SPiel alle SPieler angezeigt und kann sich dann mit einem verbinden(übernimmt der Server) also der Server dient nur als Lobby und connected die SPieler dann direkt und spielen somit nicht mehr über den Server. Die SPieler sollen dann auch aus der Lobby ausgtragen werden.

Ich hab jetzt aber sehr wenig Ahnung von der Netzwerkprogrammierung und wollte fragen ob jemand ein gutes Beispiel hat, src oder ne gute erklärung?

Vielen Dank im voraus
 
Einen Source-Code kann ich dir jetzt auf die Schnelle nicht bieten, aber ich kann dir sagen, wie ich das angehen würde. Es gäbe da verschiedene Ansätze, mir fallen gerade spontan genau zwei ein.

Der Server hat hat beide Seiten in seinen Verbindungen gespeichert, weiß also die Daten zu beiden Clients. Der Server und die Clients müssen ja irgendwie mit einander kommunizieren, ich denke mal, du hast dir da sone Art Protokol ausgedacht. Wenn nicht, dann solltest du es tun, denn die Kommunikation muss bestimmten Standards folgen, sonst gibts nur ein Chaos.

Wenn ein Client nun gegen einen anderen Client spielen will, schickt der erste Client eine entsprechende Nachricht an den Server. Der Server weiß nun: "Aha, der Typ will gegen den Typen spielen". Nun kommen die beiden Möglichkeiten ins Spiel.

1. Möglichkeit:
Der Server schickt die Daten (IP und was sonst noch benötigt wird) des zweiten Clients zum ersten Client. Dieser wird mit den Daten versuchen sich mit dem zweiten Client zu verbinden. Damit das aber geht, muss der zweite Client ja einen Server spielen. Damit das passiert, schickt der eigentliche Server dem zweiten Client eine Nachricht, dass er seine Serverfunktion starten soll. Der zweite Client könnte dann also einen Thread starten, der als Server fungiert..

2. Möglichkeit:
Der Server hat ja die Sockets zu beiden Clients offen. Nun könnte der Server diese Sockets zu den Clients schicken, z.B. via Object-Stream. Ich dachte mir das so: Der Server schickt dem anfragendem Client den Socket des Ziel-Clients. Ist der Socket beim anfragenden Client angekommen, tauscht dieser den Verbindungs-Socket zum Server gegen den "neuen" Socket aus und kann direkt mit dem Ziel-Client kommunizieren. Für den zweiten Client ändert sich also nix, außer dass er nun ohne es zu merken mit einem Client zu tun hat, anstatt mit einem Server.
 
Zuletzt bearbeitet:
also ich würde bezogen auf die 2. Möglichkeit nicht ganze Sockets afu die Reise schicken, IP und Port sollte als String total ausreichen.

Wenn Du Zeit und Motivation mitbringst würde Ich an Deiner Stelle es mal Mit JXTA versuchen. Es gibt sogar eine Art übergeordnete Anwendung MyJxta, die Frameworkartig vielleicht schon so etwas wie einen Lobby-Server darstellt.
Die MyJxta-Anwendung hat jedoch (noch) den Nachteil nicht so sonderlich gut kommentiert bzw dokumentiert zu sein.

JXTA hat mittels seinen Rendevouz-Protokollen den Vorteil, dass man auch über Router und Firewalls hiauskommen kann (so lange nicht alles versperrt ist)
 
Zurück