# Server mit mehreren Clients



## Alex04 (14. Jul 2008)

Hallo,
und zwar würde ich gern mein Spiel Netzwerkfähig machen.

Ich habe mir dazu bereits eine kleine Server Klasse geschrieben mit der ich Strings zwischen Server und Client hin und her schicken kann. Es soll ein 2 Player spiel werden, allerdings wäre es Top wenn mehr Leute gleichzeitig gegeneinander spielen können. (Aber immer nur 1 vs 1)

Nun ein paar Fragen:
1) Ist es sinnvoll alle Berechnungen bezüglich Koordinaten (Zug gültig Ja nein usw.) auf dem Server zu machen und die Clients nur noch das was der Server sendet zeichnen lassen?

2) Ich würde gerne für jeden Client einen eigenen Thread einrichten, d.h. verbindet sich ein Client mit dem Server, wird automatisch ein neuer Thread erzeugt und ihm zugewiesen. Innerhalb dieses Threads werden dann die Nachrichten empfangen und versendet. Ist dies von der Performance her nicht etwas laggend? Hier kommen wir zum 3ten Problem:

3) Wenn mehrere Spiele gleichzeitig gegeneinander Spielen, wie ermittle ich dann den passenden Client, an den die Aktionen seines Mitspielers gesendet werden? Meine Idee ist folgende: Verbindet sich ein Client wird ein neues Client Objekt erstellt, welches als Attribut die IP des Clienten sowie die des Gegners hat. Diese Client Objekte Speicher ich dann in einer LinkedList<Clients> als Attribut von meiner Server Klasse. Nun kann ich in jedem ClientThread (Thread ist innere Klasse von Server) auf den zugehörigen Gegner zugreifen und somit die Nachrichten korrekt übermitteln. Meine Frage nun, gehts auch einfacher? Ist bisschen umständlich, war nur meine erste Idee

Das wars fürs erste, hoffe ihr könnt mir helfen  
Mfg und danke schonmal
Alex


----------



## Illuvatar (14. Jul 2008)

1) Ja, sonst kann der Client leicht "cheaten"

2) Solange du nicht hunderte bis tausende Clients hast, kein Problem. Die Rechenzeit die du für einen Client hast ist natürlich ungefähr gegenproportional zur Anzahl Clients - aber dass das zu vermeiden ist, denke ich nicht.

3) Mein Vorschlag: Eine Klasse Game, die hat allgemeine Informationen zu dem jeweiligen Spiel und Referenzen auf zwei Player. Im Player sind dann eben logischerweise Informationen zu den einzelnen Spielern, und jeder Player kennt sein Game. In deinem ClientThread kannst du dann auf den zugehörigen Player zugreifen und die Infos über den an den Client schicken oder andersrum.


----------



## tuxedo (15. Jul 2008)

Zu 3) und dem Rest:

Ja, man sollte sich mal mit den basics der Socketprogrammierung rumgeschlagen haben. Aber hat man das mal verstanden, sollte man sich auch noch andere - ich nenn's mal Frameworks - anschauen und evaluieren was am besten für das jeweilige Problem passt.

Hier ein Paar Schlagwörter:

- xSocket (NIO statt nur IO)
- RMI (weg von der low-level Socket-Kommunikation, hin zu "Remoteobjekten")
- SIMON (ähnlich wie RMI, siehe meine Signatur)
- google liefert diverse weitere Frameworks und Libs die einem das Leben bzgl. der Netzwerkkommunikation erleichtern...

Gruß
Alex


----------

