Netzwerkfähiges Multibenutzerkartenspiel

Status
Nicht offen für weitere Antworten.

JPKI

Top Contributor
Tag.

Ich programmiere jetzt an einem Kartenspiel, und dieses soll einen Mehrspielermodus unterstützen. Dazu nutze ich RMI. Eigentlich klappt jetzt alles, nur möchte ich jetzt, dass beim Spielstart ein Dialog angezeigt wird, indem der Nutzer auswählen kann, ob er einen Server erstellen oder einem bestehenden Server beitreten möchte.

Mein Problem jetzt: Wie kann ich das Netzwerk nach bestehenden Servern durchsuchen (wenn der Benutzer "Client" anklickt, soll eine Liste der bisher von anderern Spielern geöffneten Servern dargestellt werden, von denen er sich einen auswählen können soll)?

Noch was: Gibt's noch irgendwas beim Erstellen der Server zu beachten, damit sie von den Clientcomputern gefunden werden können?
 

The_S

Top Contributor
Hm, wenn ein Server erstellt wird, regestriert er sich mit Port, IP und ggf. Namen an einem zentralen-Verwaltungsserver. Dieser Verwaltungsserver gibt dann auf Anfrage der Clients die Liste mit angemeldeten Server weiter.
 

JPKI

Top Contributor
Hilft mir leider nicht so wirklich weiter...
Hättest du wohl ein kleines Beispiel oder einen Link für mich?
 

FelixR

Mitglied
So wie der Hobbit es lösen würde, würde ich es auch lösen. Suchen ist fast unmöglich bzw. dauert es einfach extrem zu lange, es sei denn der Bereich der gescannt werden soll ist klein (z.B. bei einem privaten Netzwerk).
Entweder in eine Datenbank eintragen lassen, einen Webserver hinzuziehen oder ein eigenes Serverprogramm schreiben, bei dem die erstellten Spieleserver sich anmelden. Clients können das die Liste anfordern.

Gruß Felix
 

The_S

Top Contributor
Frage mit der Erklärung von FelixR geklärt? Oder bedarf es noch weiterer Erläuterungen?
 

FelixR

Mitglied
qhxzlpiM8vZWifk.JPG
 

JPKI

Top Contributor
@FelixR: Wie das gemeint ist, ist schon klar :wink:
Ich hätte da nur noch eine kleine Frage zur praktischen Umsetzung:
Der "Haupt-Server" muss ja eine statische IP-Adresse auf einem statischen Port haben, um von den Clients angesteuert zu werden. Da das aber bei unterschiedlichen Netzwerken nicht immer möglich ist, weiss ich dieses Problem jetzt nicht zu lösen.

Wüsste da wer Rat?
 

The_S

Top Contributor
In einem lokalen Netzwerk hat man doch meistens eine statische IP ???:L . Ansonsten z. B. über DynDNS fürs Internet oder eben ein richtiger Server.
 
S

stev.glasow

Gast
unterscheide zwischen lan spiel und internet spiel. im lan machst du nen broadcast (ohne "hauptserver")und im www ist der "hauptserver" irgend nen webserver oder du mietest dir nen root server wenn das nicht über http laufen soll.
 

JPKI

Top Contributor
Das Spiel soll nur LAN-fähig sein. Wie erreiche ich, dass die Clients genau wissen, unter welcher IP sie den Namensserver erreichen?
 

The_S

Top Contributor
Bei kleinem Lan wie gesagt Broadcast, bei großem Lan müssen die jeweiligen Spiele ja eingerichtet/konfiguriert werden und da kannste ja dann die IP und Port von deinem Verwaltungsserver mit angeben.
 

JPKI

Top Contributor
Hab jetzt ne Frage zu RMI:
Wenn ich den Namensserver als "rmi://NameServer" in der RMI-Registry registriere, kann doch jeder mit Registry.lookup("rmi://NameServer") den Namensserver holen, oder?
Oder muss ich da mit folgendem Muster die IP mit angeben: "rmi://<IP-Adresse>/NameServer"???

Wenn Ersteres ginge, könnte ich den Namensserver ja ganz einfach realisieren, ich müsste ihn pro LAN-Party nur auf einem PC einmal starten und er wäre ja sehr leicht zu erreichen...
 

The_S

Top Contributor
JPKI hat gesagt.:
Wenn Ersteres ginge, könnte ich den Namensserver ja ganz einfach realisieren, ich müsste ihn pro LAN-Party nur auf einem PC einmal starten und er wäre ja sehr leicht zu erreichen...

LOL! Was machst du für LAN-Partys? "Hey komm legen wir CounterStrike beiseide, jetzt zocken wir mal ne Runde MauMau!" :lol: . Einfach zu geil, wobeis auch irgendwo n bissal traurig is. Wenn ich mit n paar Leuten sowieso in einem Raum bin, dann pack ich lieber meine echten Karten aus, als dass ich vernetzt am PC zock :roll: .

Sorry für OT, aber das musste raus und ansonsten hab ich leider noch nie etwas mit RMI gemacht :oops:
 

JPKI

Top Contributor
Hobbit_Im_Blutrausch hat gesagt.:
LOL! Was machst du für LAN-Partys?

Ach weisst du, unsere LAN-Partys dauern immer so 16-24 Stunden. Irgendwann hat man dann halt die Nase voll von CoutnerStrike, Battlefield, und so weiter, man hat eben genug Blut und Waffen gesehen und möchte halt mal ne gemütliche Runde Karten spielen. Und wenn ich dann "echte" Karten rausholen würde, wäre der Sinn der LAN-Party verfehlt :wink: :bae:

Meine Frage steht übrigens noch offen!
@Hobbit: Die Kartenspiele, die ich spiele, sind ein wenig komplexer als MauMau :cool:
 

FelixR

Mitglied
Wie das mit dem RMI funktioniert kann ich dir nicht sagen, habe noch nie damit arbeiten müssen.

Ich habe aber immer noch nicht verstanden wo genau dein Problem liegt...

Der "Haupt-Server" muss ja eine statische IP-Adresse auf einem statischen Port haben, um von den Clients angesteuert zu werden. Da das aber bei unterschiedlichen Netzwerken nicht immer möglich ist, weiss ich dieses Problem jetzt nicht zu lösen.

Warum ist es bei unterschiedlichen Netzwerken nicht immer möglich statische IP zu haben?

Jeder bekommt eine IP und die behält er auch bis zum ende der LAN-Party.
Aufgeschrieben auf einer Liste, weiß jeder jeden zu erreichen.

???:L
 

JPKI

Top Contributor
Dann hab ich mich wohl unklar ausgedrückt. Also: Ich möchte es vermeiden, den Benutzer beim Starten des Programms nach der IP des Namensservers fragen zu müssen.

Deshalb soll jeder Client wissen, dass der Namensserver z.B. die IP-Adresse 168.0.0.1 hat. Was, wenn der PC, auf dem der Server laufen soll, beispielsweise die IP-Adresse 168.0.1.2 hat? Dann ist er doch für die Clients unerreichbar. Daher meine Frage: Wenn ich mit RMI einen Server unter "rmi://Nameserver" registriere, müsste ihn doch jeder Client mit lookup("rmi://Nameserver") erreichen können, oder?
 

schalentier

Gesperrter Benutzer
Hallo,

ich arbeite grad an etwas vergleichbarem (kein Kartenspiel, sondern ein Brettspiel) und hab mich fuer jGroups entschieden. Das ist ein beliebig konfigurierbarer Netzwerkstack (wird wohl auch vom JBoss eingesetzt glaub ich). So kannste dir z.b. ein Multicastfaehiges Protokoll ueber TCP/IP zusammenbauen (oder halt fuer LAN ueber UDP / Broadcast).

Technisch haste im Code nur eine Instanz von JChannel, dem du die Konfiguration uebergibst (bei Multicast ueber TCP/IP stecken dort IP's von permanent laufenden Servern drinne) und connect() aufrufst. Der versucht sich dann mit anderen Clients zu verbinden, um so eine Gruppe (daher wohl der Name) aufzubauen. Nachrichten, die an den Channel gesendet werden, werden dann von allen verbundenen Clients empfangen. So aehnlich wie IRC ;-)

Vielleicht hilfts ja... achso, die Nachrichten selbst koennen per Serialisierung simpelst verschickt werden...
 

JPKI

Top Contributor
Das ist doch mal was! Ich werd's mir morgen mal genau anschauen.
Dennoch, wäre mein Weg über RMI auch denkbar?
Weiss wer 'ne Antwort auf meine Frage?

Wenn nicht, benutz' ich wohl JGroups. Ich hätt halt nur gern RMI genommen, sonst müsst ich meinen ganzen Code nochmals umschreiben...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben