Netzwerk und Serialisierung

Der Wolf

Erfahrenes Mitglied
Hallo Freunde,

ich habe mir letztens zum Spass ein kleines Server-Client Programm geschrieben und wollte da serialisierte Daten drin verschicken. Das klappt soweit auch alles. Mein Server horcht brav auf neue Clients und verschickt auch das Objekt über einen ObjectOutputStream. Das Objekt selbst ist ganz simpel und enthält nur eine private Variable für einen String sowie die Getter/Setter Methoden. Als Argument für die setter-Methode übergebe ich auf Server-Seite
message.setMessage("Client: " + String.valueOf(counter));
Der erste Teil des Strings, also das "Client: " kommt auf der ClientSeite auch richtig an.
Hab ich auch getestet, indem ich einfach mal den Teil geändert habe, aber der Counter, der ständig nach jedem Durchlauf um einen erhöht wird, kommt nicht an. Da steht immer eine 0 auf der Client-Seite. Woran kann das liegen? Wenn ich mir auf Server-Seite den String mit message.getMessage() ausgeben lassen, steht da das richtige.

Gruß
Der Wolf
 

Anhänge

Hallo!

Schmeiß jeweils ein neues Objekt in den Stream:

Code:
public void run() {
            while (true) {
                final ChatMessage message = new ChatMessage();
                message.setMessage("ClientABC: " + String.valueOf(counter));
...

Dann klappt es. Und ein output.flush() ist auch immer nicht schlecht :)

Gruß,

RoCMe
 
Ok danke. So klappt es. Aber warum muss ich denn immer ein neues Object reinschmeissen, statt das ich das alte einfach update und neu verschicke?
 
Aber warum muss ich denn immer ein neues Object reinschmeissen, statt das ich das alte einfach update und neu verschicke
Erwischt... Ich weiß es auch nicht. Ich gebe zu, ich denke schon den halben Arbeitstag darüber nach, aber zum googeln werde ich heute nicht mehr kommen. Hoffen wir mal, dass uns jemand erkläört, was hier vor sich geht :)
 
Hallo,

der ObjectOutputStream cached schon mal gesendete Objekte. Du brauchst nicht immer ein neue Instanz zu erzeugen... wenn du den Objektzustand der Instanz geändert hast kannst du auch ein reset() am ObjectOutputStream aufrufen. Durch reset wird der gecachedte Zustand verworfen und du siehst die neuen Werte.

Gruß Tom
 
Schlaues Kerlchen, dieser ObjectOutputStream :-) An Caching hatte ich mal einen kurzen Gedanken verschwendet, aber bin immer davon ausgegangen, dass er wohl nicht cachen wird, wenn ich ihn nicht explizit darum bitte ...
Wieder was gelernt :)
 
Zurück