Server(Java)/Client(Android) problem beim Senden von eigenen JavaObjekten (Senden von Strings klappt)

  • Antworten:5
Sercan Savran
  • Forum-Beiträge: 11

27.04.2017, 11:31:32 via Website

Hallo liebe Community,

ich versuche derzeitig ein Server/Client Beispiel als Übung durchzuführen.

Ich habe schon Erfahrung in Server/Client Design mit Sockets (Java Client <-> Java Server) machen dürfen und habe mir erst einmal, einen kleinen Chatprogram geschrieben, welches unter Java Client und Java Server super funktioniert.

Beim Android allerdings klappt bis jetzt nur der "Login". Also als Login sende ich ein ganz normalen String mit den Nutzernamen dies klappt auch auf mein Server und von den Java Clients wird der Android Client auch in der Nutzerliste gesehen.

Kommen wir nun zu den Nachrichten. Für ein Nachricht wird ein Message Object erstellt. Java Client <-> Java Server = klappt Super. Java Server <-> Android Client = kommt nichts an. Ich meine mal darüber gelesen zu haben, dass bei der Serialisierung von JavaObjekten in verschiedenen Java Versionen sehr komische Sachen passieren und es nicht gut geeignet wäre (Warum? (thinking)).
Ich weiß ja auch nicht was für ein JVM auf Android Seite läuft und muss sagen, dass ich im Bereich Android-Programmierung eher unerfahren bin (es handelt sich um ein Galaxy Note 2 API 19)

Nun bin ich mir fast sicher, dass das Problem an dem Message-Objekt liegen muss, da mein Username als String vom Android in den OutputStream geschrieben ja auch beim Server so ankommt wie es soll...
Wie löse ich dieses Problem? (thinking)
Hattet Ihr schon ähnliche Erfahrung machen müssen?
Oder muss ich hierbei auf JSONObjects umsteigen und kann bei einem Server/Client Lösung zwischen Java Server und Android Client nicht mit normalen Objekten arbeiten?

Liebe Grüße :)

— geändert am 27.04.2017, 11:32:56

Antworten
swa00
  • Forum-Beiträge: 3.704

27.04.2017, 11:34:54 via Website

Hallo Secran,

ohne Code können wir leider nur schlecht eine Aussage treffen.

Folgende Dinge solltest du mal im Vorfeld abklären :

a) Ist dein TCP/UDP Handling in einen Thread eingebettet ?
b) Wenn ja, hast du mal simple ASCII Strings im Stream hin und her geschickt ? ( mal ohne Login etc)

— geändert am 27.04.2017, 11:36:08

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Sercan Savran
  • Forum-Beiträge: 11

27.04.2017, 16:51:30 via Website

Hallo swa00,

danke erstmal für dein Antwort, ich wollte euch nicht mit insgesamt 700 Zeilen Code hier vollbombardieren.

Ja für jeden Client wird ein Thread erstellt. Ich habe beim Debuggen feststellen können, dass mir die folgende Zeilen ein ClassNotFoundException wirft, sobald es ein Android Client ist...

try {
    cm = (Message) sInput.readObject();
}
catch (IOException e) {
    display(username + " Exception reading Streams: " + e);
    break;              
}
catch(ClassNotFoundException e2) {
    break;
}

Wieso passiert das (thinking) bei Android Clienten? Es handelt sich um genau den selben Objekt (Die Klasse ist durch Copy & Paste entstanden, also kann Sie bei Android gar nicht anders sein), bis auf die package auf Android Seite.

EDIT: Ich habe rein aus langeweile mal den Package Namen auf Server Seite genau so benannt wie auf Client. Jetzt klappt das ganze? :O (thinking)

— geändert am 27.04.2017, 16:52:36

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.04.2017, 17:01:22 via App

Ja du musst aufpassen an welcher Stelle die ClassNotFound EX kommt. Da dann mal debuggen vlt gibst du ja den ClassName incl. Package etc mit und versuvhst dass dann dynamisch zu erstellen. Bei falschem Package geht das nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Sercan Savranswa00

Antworten
Sercan Savran
  • Forum-Beiträge: 11

28.04.2017, 02:47:18 via Website

Ich wüsste jetzt nicht wie ich ein Objekt der Message Klasse exklusive Packagenamen weiterleiten soll? :O
Edit by Mod Pascal: Unnötiges Vollzitat entfernt

— geändert am 28.04.2017, 07:22:21 durch Moderator

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.04.2017, 07:22:04 via App

Ich weiß ja nicht genau wie du die Daten übeträgst. Du brauchst ja eine Art Serialisierung etc. wie genau baust du das auf und wie genau nimmst du die Daten am client an?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten