Socket Allgemeine Verständnisfrage

mugsawaay

Aktives Mitglied
Hallo zusammen,

habe vor ein kleines "17 und4" Projekt zu realisieren (Server + max. 6 Client Teilnehmer, via Internet)
Client meldet sich beim Server an, und ist Teilnehmer
bekommt vom Server Liste der schon vorhandenen Teilnehmer.
Falls vorhanden meldet der Client dem Server mit welchem Spieler er spielen möchte.
Server meldet beiden Clients das sie starten können, und wer anfängt.
bei mir läuft einApache Server und eine SQL Datenbank
Nun meine Fragen:
1. Kann ich diesen Server überhaupt nutzen und z.B. Java als Anwendung darauf laufen lassen, oder schreibe ich besser einen eigenen Java Server?
2. Wie realisiert man die GUI auf der Clientseite (JavaScript, JavaApplet, ......)?
Hintergrund: ich hatte dieses Spiel seinerzeit mal komplett in Java mit Swing realisiert (ganz primitive Variante)und wollte dieses jetzt "quasi auseinanderziehen"
3. Der Hintergrund ist der, das dies nur ein simples Beispielprojekt ist, würde man statt "17 und 4" schach spielen, wären sowohl die gui, als auch die überprüfungen wesentlich komplizierter.
4. Super wäre es, falls jemand diesbezüglich einen Standard, oder Literatur kennen würde.
Vielen Dank

 

Kevin94

Top Contributor
1. Du kannst ihn nutzten, würde ich allerdings nicht empfehlen. Ein Apache Server ist für Webseiten gedacht, sprich der Client sagt was er haben will und der Server antwortet. Man kann das zwar auch mit Hilfe von JavaScript und AJAX umsetzten, es ist aber nicht die beste Wahl.
2. Hängt davon ab, was dein Server ist. Falls du ernsthaft das ganze mittels eines Webservers umsetzten möchtest, heist das automatisch, dass du mit JavaScript programmieren musst. Ein Applet in Java (oder eine Flash-Anwendung) wären zwar auch Möglichkeiten, aber allein der Aufwand, dass ein Applet ohne duzende Sicherheitswarnungen geladen wird, sollte heutzutage Abschrekung genug sein, dies zu verwenden; Flash bedeutet erstmal Einarbeitungsaufwand und ich bin mir nicht sicher ob man das kostenfrei programmieren kann.
3. Das ist richtig. Für den gewünschten Lernerfolg dürfte das Spiel vollkommen nebensächlich sein.
4. Einen Standard für was? Dafür wie ein Zügebasiertes Spiel für Zwei Personen per Server zu implemtieren ist? Dürfte eine häufige Aufgabenstellung sein, aber ich denke so bürokratisch sind wir dann doch noch nicht. [/Ironie] Ne, im Ernst: Ein Standard für was?

Meine Empfehlung wäre (da wir hier im Java-Forum sind) sowohl Server als auch Client als eigenständiges Java-Programm zu implementieren. Dies hat Vorteile:
  • Bidirektionale Kommunikation möglich, d.h. jede Seite kann eine Anfrage schicken, bei einem Webserver kann dies nur der Client
  • Man kann ein eigenes, für den Zweck erstelltes Protokoll verwenden, was die zu Übertragende Datenmenge erheblich reduziert
  • Du bist nicht an eine Programmiersprache für Client/Server gebunden, du könntest (bei einem festen Prokoll) jeder Zeit eine der der beiden Seiten auch in einer anderen Programmiersprache/Framework umsetzten (z.B. Portierung zu einer Smartphone App)
  • Implentierung der Oberfläche mit bekannten/besser geigneteren Frameworks möglich (z.B. Swing)
und Nachteile:
  • Du den Server Code schreiben musst (nicht nur die Serverlogik), bei Verwendung von geeigneten Frameworks wie z.B. Netty ist das aber kein Aufwand, wobei der Lernerfolg dieses Projekts wohl wesentlich größer wäre, wenn du das selber schreibst
  • Du den Server nicht auf einem 0815-Billig-Webserver Angebot hosten kannst (höchstens auf einen teureren VServer)
Du kannst den Server auch auf dem eigenen Rechener hosten, aber dann musst du an deinem Router einige Einstellungen machen (Port-Forwarding und DynDns wäre auch nützlich) und deine Firewall kann natürlich auch immer dazwischen funken.
 

mugsawaay

Aktives Mitglied
Vielen Dank für die Antwort, du hast Dir ja richtig Müphe gegeben.
Ehrlich gesagt kommt mir das was du schreibst sehr entgegen.
Server und Client beides unter Java und selber schreiben.
Wenn ichs richtig verstanden habe nochmals zur Zusammenfassung:
1. Selbstgeschriebener Server in Java startet Mysql Datenbank
2. Client meldet sich beim Server an (ich habs bei mir so realisiert, das ich einen alten UbuntuRechner dafür nutze)
der ist mit meiner IP aus der Ferne erreichbar! das habe ich schon getestet, Nachteil Ip muß täglich neu bekannt gegeben werden, stellt her aber kein Problem dar, könnte aber wie du schon sagtest rel leicht geändert werden)
3. Der Client stellt die GUI dar (SWING) stellt Verb. Wunsch an Server und wird ggf. mit einem Spieler "connectiert".
4. Nach einem Zug wird der zum Server gesendet diesr teilt dies dem Partner mit und dieser ist dann an der Reihe, usw.

d.h. aber auch, das der Client, sowie die Kommunikation auch selbst geschrieben werden muß, oder?
wenn ichs mir recht überlege ist das doch im Prinzip nichts anderes wie ein "Chatprogramm" beim Client muß dann noch irgendwie ne Gui dran und der Server muß alles Verwalten incl. Statistik etc mit eienr Datenbank.
Gibt es sowas im Prinzip nicht standarisiert, ähnlich wie die Datenbankschnittstelle in Java?
Vielen Dank

 

Kevin94

Top Contributor
Ich habs schonmal geschrieben: Ein Standard für was genau? Für die Implementierung einer ServerClient Architektur, da hab ich dir schon Netty genannt. Wie man die Kommunikation zwischen zwei Java-Programmen vereinfachen kann, ja da gibts auch was (s. Spoiler). Zum Ablegen von Objekten in einer Datenbank, das wäre das weite Feld der ORM-Frameworks (z.B. das sehr umfangreiche Hibernate). Wie das ganze Programm zu strukturieren ist, da gibt es verschiedene Modelle, ich bin aber nicht die richtige Ansprechperson dafür (könnte dir adhoc keins nennen, geschweige denn erklären).
Es gibt in Java etwas, dass sich RMI nennt sowie AlternativFrameworks (z.B. SIMON), mit dem du das Ganze ohne das schreiben eines Prokolls implementieren könntest, sondern Server und Clients als ein Programm betrachten kannst. Ich würde dir allerdings nicht dazu raten, da ich nicht weis, wie es mit Performence und Sicherheit dieser Schnittstelle bestellt ist. Außerdem würde das vermutlich auch dem gewünschten Lernziel wiedersprechen.
Als Datenbank würde ich nicht unbedingt MySQL empfehlen, wenn du nur Java-Code hast, der darauf zugreift. h2 ist z.B. eine Datenbank, die komplett in Java implementiert ist und auch direkt in das Programm integriert werden kann ohne als Server laufen zu müssen (zumindest wenn nur ein Programm drauf zugreift), was die Performence doch sehr positiv beeinflusst. Es gibt noch viele andere Datenbanken, die nicht so aufgebläht sind wie MySQL. Du solltest mal schauen welche für dich am besten geeignet ist, MySQL wird es vermutlich nicht sein.
Das Problem mit der sich ändernden IP lässt sich, wie schon gesagt, mit einem DynDNS Service umgehen. Ich nutzte z.B. NoIP, da DynDNS selber nicht mehr kostenfrei ist. Du solltest bei deinem Programm die IP/Addresse des Servers aber aufjeden Fall dynamisch machen und nicht hartgecodet, auch weil es dir passieren kann, dass du die lokale IP verwenden musst, wenn du vom eigenen Rechner drauf zugreifen willst. Hintergrund ist, dass manche Router es nicht zu lassen, dass man von einem Rechner mit lokaler IP über die Inet-IP des Routers und PortForwarding auf einen anderen/den selben Rechener zugreift. Ich versteh den Sinn zwar nicht, aber das gibts, leider :(
Den Gedanken eine direkte Verbindung zwischen zwei Clients herstellen zu können (wenn ich das richtig aus 3. interpretiere), solltest du allerdings verwerfen. Das geht zwar (UTP-Holepunching) ist aber dafür zu aufwending und nicht wirklich sicher. Die Daten müssen also vom einen Spieler über den Server zum anderen Spieler laufen.
 

Ähnliche Java Themen


Oben