# Packet im Packet erhalten (Rahmen&Botschaft Problem)



## Lord_Aratorn (10. Jul 2008)

Hi,
ich habe folgendes Problem:

Ich bin ein Server und kommuniziere über ein Netzwerk mit einem nicht Java Client.
Ich erhalte von ihm diverse Packete, welche jeweils aus einem Header, einem Body und einer Endzeile bestehen,
Der Body kann wiederrum aus einem oder mehreren unterschiedlichen Objekte bestehen.
nun meine Frage, wie realisiere ich dieses, bzw kann ich es wie unten abgebildet realisieren?
Und wenn ja, woher weiß ich, wenn ich ein Packet bekomme, welche Art von Wesen im Body enthalten ist, und wieviele Wesen es sind?
beispiel:

```
class Packet{
String ID;
Body[] body;
}[

class Haustier extends Body{
String Name;
int Anzahlbeine;
bool hatSchwanz;
bool hatPelz;
}

class Person extends Body{
String Name;
String Vorname;
String Adresse;
}
class Body{
String Name;
}
/code]
```


----------



## SlaterB (10. Jul 2008)

wie überträgst du denn, Serialisierung, RMI, Sockets, HTTP?

wenn du nur ein Objekt übergibst und das am Ende so ankommt, 
dann ist das doch ok mit Paket, oder klappt was nicht?

welche Bodys dann drin sind ist ein allgemeines Problem bei einem Array der Oberklasse, 
hat nix mit der Übertragung zu tun,
entweder prüfst du jedes Element mit instanceof auf die verschiedenen Klassen
oder du legst zusätzlich eine Beschreibung an, z.B. einen String oder einen Enum, welcher den Typ beschreibt,
die muss man dann immer noch mit if/ else prüfen je nach Weiterverarbeitung


----------



## Lord_Aratorn (10. Jul 2008)

Vielleicht die Ursache des Problems, dass ich dieses Packet über UDP empfange und ein neues Antwortpackte erstelle und sende.

Also habe ich eine serialize und eine deserialize Methode im Body, welche ich jeweils unterschiedlich in den erbenden Klassen implementiere


----------



## SlaterB (10. Jul 2008)

> Vielleicht die Ursache des Problems

welches Problem?,
ist noch eine Frage offen?


----------



## Lord_Aratorn (10. Jul 2008)

>welche Art von Wesen im Body enthalten ist, und wieviele Wesen es sind? 
ist eigentlich mein aktuelles Problem im Zusammenspiel mit dem Serialisieren.
Ich bekomme nur ein Bytearray, woher soll ich wissen wieviele verschiedene Typen in diesem enthalten sind
bsp:
Haustier, Haustier, Person
oder Person, Haustier, Person
........
ist?


----------



## tuxedo (10. Jul 2008)

Serialisieren ist in dem Fall etwas ungeschickt. Du musst beim de-serialisieren einfach wissen was wie in welcher Reifenfolge in den Stream reinserialisiert wurde (wenn wir hier von "serialisieren so wie es java macht, also ObjectOutbutStream und Co." sprechen).

Generell mach ich das bei meinem Programmen immer so, dass ich vor jedes Object eine ID stelle, die das Object bzw. den Typ identifiziert.

Würde dann also so aussehen:

ID-Map:
1=Haustier
2=Person

Dein Beispiel würde dann so aussehen:

1<diverseBytes>1<diverseBytes>2<diverseBytes>

bzw.

2<diverseBytes>1<diverseBytes>2<diverseBytes>


Da ich oft nicht weiß wie lang ein Object ist und wann es im Stream aufhört, stelle ich zwischen ID und Object selbst noch die Länge des Objekts als Integer (also weitere 4 bytes) rein.

- Alex


----------



## Lord_Aratorn (10. Jul 2008)

Super danke, sowas in der Art habe ich mir auch gedacht


----------

