Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Durchnummerierung von Klassen, die ein Interface implementieren.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.04.2007, 21:52 Uhr
halber



Ich habe eine Client und eine Server Anwendung, die über das Netzwerk Daten austauschen sollen. Da es sich bei den Daten um Objekte handelt habe ich ein Interface gebaut, das von den Klassen, die übers Netzwerk verschickt werden können implementiert wird. Jetzt habe ich nur ein Problem. Wie erkenne ich auf der Empfänger Seite was es ist.
Meine erste Idee ist einfach ein short an den Anfang der Daten zum identifizieren zu setzen. Dann habe ich aber ein weiteres Problem. Wie stelle ich sicher, dass zwei Klassen nicht zufällig die gleiche Nummer bekommen, was ja passieren könnte, wenn die Nummern vom Programmierer vergeben werden. Kann man sowas irgendwie mit Makros machen?
Oder hat jemand eine bessere Idee.
--
Ich bin faul und mein Computer ist schnell!

Dieser Post wurde am 24.04.2007 um 21:55 Uhr von halber editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.04.2007, 22:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du könntest ja sowas wie folgendes Machen:

Die Objekte:

C++:
class A
{
   int foo;
   int bar;
};

class B
{
   int foo;
   int bar;
};



Client:

C++:
A a;
B b;

send(sizeof(a), sizeof(unsigned int));
send(&a, sizeof(a));
send(sizeof(b), sizeof(unsigned int));
send(&b, sizeof(b));



Server:

C++:
A *a;
B *b;
char *temp;
unsigned int length;

while(irgendwas)
{
  recv(length, sizeof(unsigned int));
  temp = new char[length];
  recv(temp, length);
  a = dynamic_cast<A*>(temp);
  if(a) {
     // war a objekt
  }
  b = dynamic_cast<B*>(temp);
  if(b) {
     // war b objekt
  }

  delete[] temp;
}



Hab das jetzt nicht getestet, könnte aber funktionieren.

Ansonsten bleibt dir natürlich nichts anderes als z.b Konstanten/enum für die Typen definieren, Programmiererfehler sind da halt leider natürlich nicht auszuschließen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2007, 00:34 Uhr
Blubber2063



Ich glaub nicht, dass das funktioniert wenn Client und Server Daten über Pipes, Sockets, etc austauschen. Dynamische Typinformationen liegen ja nur der jeweiligen Applikation vor. Dürfte eigentlich nur mit einer passenden Kennung funktionieren. Wenn es um Programmierfehler geht, dann kannst du wohl nur probieren das mit einheitlichen dynamischen Bezeichnern zu machen, so wie Java, allerdings wäre das schon etwas übertrieben. Denke mal mit ner Enum in nem Header den beide verwenden wäre der Sache am besten gedient.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.04.2007, 09:31 Uhr
halber



Danke der Antworten.

Denke auch das dass mit dem dynamic_cast nicht funktioniert, aber werde es bei Gelegenheit mal ausprobieren. Aber was mich interessieren würde ist, was sind einheitliche dynamische Bezeichner? Google war zu den Begriffen auch sehr zurückhaltend. Kann man mir ein Beispiel zeigen?
--
Ich bin faul und mein Computer ist schnell!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.04.2007, 10:37 Uhr
Blubber2063



Ist doof genannt, Java verwaltet seine Klassen mit Strings(Wobei da in Java ja auch gehasht wird). D.h. dynamische Typinformationen werden immer über den Klassennamen und die zugehörigen Pakete mit aufgelöst. Wenn man mit Java klassen überträgt schlägt der serialisierungs Mechanismus zu und dort werden dann auch diese dynamischen Typinformationen übertragen, das ist so gemacht damit man auch Klassen zur Laufzeit nachladen kann, aber das funktioniert ja dort eh nur so richtig weil dort interpretiert wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: