Netzwerkkommunikation bei Mau-Mau App

  • 8 Antworten
  • Neuester Beitrag
Diskutiere Netzwerkkommunikation bei Mau-Mau App im Android App Entwicklung im Bereich Betriebssysteme & Apps.
A

arkadiusj

Neues Mitglied
Hallo Zusammen,

ein Kommilitone und ich müssen eine Mau-Mau App entwickeln. Man soll das Spiel zu zweit per Netzwerk / Internet spielen können. Hierbei stellt sich mir allerdings die Frage, wie man die Netzwerkkommunikation am Besten umsetzt. Der Server soll eine Java-Anwendung sein.

Macht es Sinn, ein Protokoll zu entwickeln (wir dachten an JSON) und dann eine einfache Socketverbindung zu verwenden oder sollte man doch lieber auf Webservices o.Ä. zurückgreifen?

Bin für hilfreiche Antworten dankbar!

Grüße
Arkadius
 
T

Tom299

Stammgast
Hi,

ich benutze auch einen Java-Server, um die Kommunikation zu steuern. Da ich wissen muß, ob jemand online ist oder nicht, brauch ich ja ne richtige Verbindung (socket connection). Also glaub ich kaum, daß man mit Webservices sowas machen kann.
JSON benutz ich auch nicht, ich übertrage meine Daten direkt über die Input- und Output-Streams der Sockets und verschlüssele meine Daten mit MD5.
 
A

arkadiusj

Neues Mitglied
Tom299 schrieb:
Hi,
ich benutze auch einen Java-Server, um die Kommunikation zu steuern. Da ich wissen muß, ob jemand online ist oder nicht, brauch ich ja ne richtige Verbindung (socket connection). Also glaub ich kaum, daß man mit Webservices sowas machen kann.
Stimmt! Daran habe ich gar nicht gedacht. :D
Tom299 schrieb:
JSON benutz ich auch nicht, ich übertrage meine Daten direkt über die Input- und Output-Streams der Sockets und verschlüssele meine Daten mit MD5.
Wie sieht denn dein Protokoll aus?
 
T

Tom299

Stammgast
Ich übertrage einfach Strings zwischen Server und Client. Beim Lesen parse ich dann und prüfe die Echtheit immer mit der MD5-Checksumme.

Aber da bist du ja frei und kannst deine eigenen Kommandos usw. benutzen, ganz wie du magst :)

Mal so als einfaches Beispiel:
Der Client meldet sich beim Server an, dann könnte der String des Clients z.B. so aussehen:

Code:
long time = System.currentTimeMillis();
String pw = "1234";
String toSend = "init#" + clientid + "#" + time + "#" + "deine daten#" + encodeMD5("init#" + clientid + "#" + time + "#" + pw);
Durch die Zeit (time) hast du in diesem Fall schon mal etwas dynamisches, damit die MD5 jedes Mal anders ist.
Auf Server-Seite weißt du ja, wie du den MD5 aufbaust, also liest du den InputStream, suchst z.B. nach strInput.startsWith("init") und splittest dann mittels deinem Trennzeichen, hier wäre es dann .split("#")
Damit kennst du die Parameter, um deine MD5 auf Server-Seite zu generieren und zu vergleichen. Wenns die gleiche MD5 ist, dann ist der init korrekt und "deine daten" sind die gewollten.

Vielleicht gibts noch bessere Methoden, aber ich habs erst mal so gelöst und bin damit zufrieden :)
 
DieGoldeneMitte

DieGoldeneMitte

Experte
Darf ich mal den Oberlehrer machen?
MD5 verschlüsselt nicht - damit signiert man nur. :flapper:

Aber die Idee, ein pw mit einzuhashen, ist gut!
 
T

Tom299

Stammgast
Ja stimmt, man signiert nur ;-)

Aber ich vertraue meiner Signatur und wenn sie nicht übereinstimmt, dann kümmert mich der Datenteil bzw. die ganze Anfrage nicht. Verschlüsseln könnte man das ganze natürlich auch, aber in meinem Fall ist mir das egal, ob jemand mitsnifft oder nicht. Außerdem kann man auch noch Datenmüll reinpacken, der interessant aussieht, aber auf der anderen Seite einfach ignoriert wird :)
 
A

arkadiusj

Neues Mitglied
Tom299 schrieb:
Ich übertrage einfach Strings zwischen Server und Client. Beim Lesen parse ich dann und prüfe die Echtheit immer mit der MD5-Checksumme.

Aber da bist du ja frei und kannst deine eigenen Kommandos usw. benutzen, ganz wie du magst :)

Mal so als einfaches Beispiel:
Der Client meldet sich beim Server an, dann könnte der String des Clients z.B. so aussehen:

Code:
long time = System.currentTimeMillis();
String pw = "1234";
String toSend = "init#" + clientid + "#" + time + "#" + "deine daten#" + encodeMD5("init#" + clientid + "#" + time + "#" + pw);
Durch die Zeit (time) hast du in diesem Fall schon mal etwas dynamisches, damit die MD5 jedes Mal anders ist.
Auf Server-Seite weißt du ja, wie du den MD5 aufbaust, also liest du den InputStream, suchst z.B. nach strInput.startsWith("init") und splittest dann mittels deinem Trennzeichen, hier wäre es dann .split("#")
Damit kennst du die Parameter, um deine MD5 auf Server-Seite zu generieren und zu vergleichen. Wenns die gleiche MD5 ist, dann ist der init korrekt und "deine daten" sind die gewollten.

Vielleicht gibts noch bessere Methoden, aber ich habs erst mal so gelöst und bin damit zufrieden :)
Alles Klar. Geht so in die Richtung, wie wir das machen wollten. Nur das wir halt JSON für die Formatierung verwenden. :)
Vielen Dank schon mal! :)
 
T

Tom299

Stammgast
Kannst mir deine Lösung bzw. den Ansatz ja auch mal irgendwann zeigen, vielleicht überzeugst du mich ja davon, daß ich auch JSON nutzen sollte :)
 
A

arkadiusj

Neues Mitglied
Tom299 schrieb:
Kannst mir deine Lösung bzw. den Ansatz ja auch mal irgendwann zeigen, vielleicht überzeugst du mich ja davon, daß ich auch JSON nutzen sollte :)
Kann ich machen. :)