Socket Object wird scheinbar falsch empfangen

OMGITM

Mitglied
Hallo,

habe ein kleines Problem beim verschicken eines Objectes über einen String. Und zwar möchte ich ein Artikel object verschicken, folgendermaßen:


Java:
// erg ist ein Artikel Object
try {
System.out.println("Artikel: \n \n" + erg + "\n \n" + geschickt");

objoutStream.writeObject(erg);
objoutStream.flush();

} catch (IOException e) {	System.err.println(e); }


der print ergibt:
Artikel:
Name: Bild
Anzahl: 100
Art-Nummer: 10

geschickt

Empfangen wird via:
Java:
Artikel a = null;
a = (Artikel) objinStream.readObject();


Wenn ich mein Programm starte, den Artikel empfangen will, ohne irgendwas gemacht zu haben läuft alles glatt.

Wenn ich allerdings starte, mir den Artikel hole, wieder zurück schicke diesmal mit einem int zusammen, diesen int dann als Anzahl setze und dann den Artikel wieder hole, wird das scheinbar das alte Artikel object empfangen.


Nochmal bisl anschaulicher:

Client: Suche Artikel (Schicke ident. String)
Server: Artikel gefunden: Schicke Artikel-Object
Client: Empfange Artikel und print
Client: möchte ein Attribut des Artikels ändern (anzahl)
Client: Schicke Artikel + neue Anzahl int
Server: Empfange Artikel + int
Server: Setze neue Anzahl und schicke geändertes Object
Client: Empfange Object und print

Bei diesem letzten Schritt ist der Fehler: das Object hat noch den alten Wert für die Anzahl.


Habe mit print und debug geprüft: Es wird definitiv das object mit den richtigen Daten verschickt, aber das mit den falschen empfangen.

Woran kann das liegen?
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Da kann man nur Vermutungen anstellen. Evtl. gibst du ja blos den falschen Artikel aus (erg statt a).

Hoffentlich ist das Ganze nur 'ne Übung für Serializable, sonst würde ich mir um das Design noch mal ernsthaft Gedanken machen.
Begründung:
1. Für solche "Verwaltungen" eignet sich SQL. Eine DB dazu kann man immer noch selbst entwickeln, wenn man Zeit hat, ansonsten bietet sich JDBC mit MySQL an.
2. Immer ganze Objekte über den Stream zu schicken, kann auf Dauer zu sehr viel Traffic führen. Wenn das ein Objektspeicher oder eine Datenbank für Online-Spiele oder Shops werden soll, wirst du damit nicht viele Kunden werben können. Schon gar nicht die, die evtl. 5GB UMTS-Volumenbegrenzung haben. ;)
3. Wenn man schon die Objekte hin und her schaufelt, dann sollten zumindest Client und Server dazu in der Lage sein, Objektattribute zu ändern, statt zusätzlichen Datenverkehr für die zu ändernden Daten zu fabrizieren.
4. Das sind blos gut gemeinte Tips. Nicht beleidigt sein, wenn's überheblich klingt. Wart' erst mal ab, wenn dir andere User Vorschläge zu "Clean Code" machen.
 

OMGITM

Mitglied
moin,

ist nur eine Übung zu Sockets. Ist eine E-Shop Übung, also Traffic egal.

Es wird definitiv das richtige Objekt verschickt. Ich habe die Zeile zum verschicken mal auskommentiert. Und dann alles genauso ausgeführt. Auf Clientseite wurde dann auf ein vom Server verschicktes Obeject gewartet und das Programm läuft nicht weiter, solange das Object nicht kommt (ist auch richtig so).

Zweiter Test war ein print vor und nach dem abschicken (Client & Serverseite).

Serverseite: Gibt das Object mit den richtig geänderten Daten raus (vor und nach dem schicken).

Clientseite: Object existiert vorm empfangen nicht - nach dem Empfangen hat es die falschen Daten.

Ich bin ratlos.
Das empfangene Object wird mit dem Empfangen erstellt und ist ganz sicher nicht irgendein schon vorhandenes.

Kann es denn sein, dass beim verschicken irgendein Puffer noch gefüllt ist und er somit das falsche Object verschickt?
 
S

SlaterB

Gast
einen Puffer gibt es in der Tat, mit reset() auf Sendeseite könnte das Problem verschwinden

genauere Details wären interessant,
wenn der Server den Artikel zurückgebekommt, ob mit int darin oder separat, dann ist dieses Artikel-Objekt B sicherlich != dem zu Beginn gesendeten A?
nachprüfen kannst du das, indem du den ersten merkst, was anscheinend eh der Fall sein muss, und eben einen Vergleich ausführst,

nun die Frage, was sendet der Server beim zweiten Mal? das eben empfangene B oder das alte A?
A ist im ObjectOutputStream-Cache, da würde also eine int-Änderung nicht auffallen,
also auf Server-Seite schon, das Objekt existiert nur einmal im Speicher,
aber der ObjectOutputStream schicht an den Client nur die minimale Nachricht 'nochmal Objekt A',
welches der Client im Originalzustand auch in seinem Cache hat

genauso nachprüfbar ist nun der zweite Empfang beim Client:
beim Cache wäre das zweite empfange Objekt exakt dasselbe wie das erste,
hast du dir das gemerkt, dann könntest du wieder mit == vergleichen und das bestätigen
 
S

Spacerat

Gast
@SlaterB: Wie, das geht? Ich hatte vor langer Zeit mal ein ähnliches Problem, als ich Teile einer Baumstruktur serialisieren wollte. Beim deserialisieren hätte mir der ObjectStream dann doch eigentlich identische Objekte, statt neuen Instanzen von bereits gelesenen Knoten liefern müssen. Das wäre dann das vom TO gewünschte verhalten des ObjectStreams, während ich es so benötigen würde, wie es gerade beim TO läuft. Hast du mal 'nen Link, wo dieses Verhalten etwas genauer unter die Lupe genommen wird?
 

OMGITM

Mitglied
einen Puffer gibt es in der Tat, mit reset() auf Sendeseite könnte das Problem verschwinden

Gold Tipp! Das ich da nicht selber drauf gekommen bin! Klappt. Weiß zwar nicht genau woran es lag, aber mit einem reset des ObjectOutputStream vor dem senden klappts!! Habe das reset mal vor jedes senden gesetzt.

Dachte das mit flush der ganze Puffer immer raus geschrieben wird... Das flush hatte ich nämlich nach jedem Senden!


Mache heute Nachmittag mal ein paar weitere, ausführliche Tests.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12
D Object in int casten Allgemeine Java-Themen 7
N Object-Array mit Comparator absteigend sortieren? Allgemeine Java-Themen 10
D Object to Long casting Allgemeine Java-Themen 9
G Object mit static Feldern speichern Allgemeine Java-Themen 9
D vergleichbare Object-Objekte generisch vergleichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben