klassen versenden



  • hiho,

    ich versuche allerhand informationen über sockets zu übertragen,
    leider bin ich immer am Sendstring gescheitert - hab das nie richtig hinbekommen

    mir kam nur die idee einfach klassen zu versenden, man kann sie ja un dateien schreiben... nur wie ich das über die borland-sockets machen soll is mir nen rätsel, aber ich komm um die nich drumrum, da ich das ganze management-zeuch der borland-sockets nich verlieren will... hat schon mal jemand sowas gemacht, bis für jeden tipp dankbar 🙂

    gruss unixman



  • Hmmm Klassen an sich lassen sich ja nicht einfach speichern.... es gibt mittel und wege ich vermute du verwendest die? Sieh dir auch SendStream & Co an... (Alles in der Hilfe zu finden)

    -junix



  • send stream hab ich ne zum laufen bekommen...und wie soll ich die klassen ín den stream und wieder raus bekommen?

    ein beispiel aus der borland hilfe:

    #include <stdio.h>
    
    struct mystruct
    {
      int i;
      char ch;
    };
    
    int main(void)
    {
       FILE *stream;
       struct mystruct s;
    
       if ((stream = fopen("TEST.$$$", "wb")) == NULL)  /* Öffnet Datei TEST.$$$ */
       {
          fprintf(stderr, "Cannot open output file.\n");
          return 1;
       }
       s.i = 0;
       s.ch = 'A';
       fwrite(&s, sizeof(s), 1, stream);  /* write struct s to file */
       fclose(stream);  /* close file */
       return 0;
    }
    

    die nehmen ne instanz ner strukur, laden die voll,
    und schreiben die in ne datei,

    das lesen geht dann mit fread man gibt an wie gross die struktur ist und zerrt die dann wieder raus

    das geht auch mit klassen - muss gehen
    da kenn ich was, ich kuck ma eben:
    http://www.informit.de/books/c++21/data/start.htm
    das is mit klassen

    das muss doch auch über sockets gehen



  • Ich hab was besseres: http://www.c-plusplus.net/oop_dummies/kap24-reste.pdf (-;

    Ahja, schau nochmal genau hin, was SendStream für welche Parameter erwartet... Es handelt sich dabei nicht um den Standard-C-Stream (-;

    -junix



  • das weiß ich selber 🙂
    ich mag das ganze borland zeuch nur nich so richtig
    alles was ich ja theoretisch tun muss: klasse nach char () casten -> char() nach String->Senden ->String nach char()->char () nach klasse casten - fertig
    ich wollte ja nur wissen ob ja jemand schonmal erfahrungen gesammelt hat, oder jemand der Erfahrener ist als ich das ma für mich testen kann - damit ich keine 'dummheitsfehler' einbaue



  • also: hab das eben nochma probiert, bin aber wiedermal nich dahinter gekommen...
    das mit den streams ist dann wohl die beste methode...

    hab ebenn im forum gesucht - zu sendstream hab ich nix gefunden - is ja auch simpel - aber wie les ich den dann wieder aus? RecvdString->Stream->Klasse??



  • Den PDF-Artikel gelesen? Du unterliegts einem grundsätzlichenj Irrtum... SO können Klassen nicht versendet werden. Klassen können weitere Zeiger enthalten welche wieder wo ganz anders hinzeigen, die dann auf der neuen Maschine absolut nicht stimmen.
    Die Selbe problematik existiert auch beim Speichern von Strukturen.

    Ausserdem solltest du von der ganzen String-Theorie ebenfalls wegkommen. Du kannst binäre daten nicht nach Belieben nach String und wieder zurück konvertieren... Ein TStream ist genau dazu da binäre Daten zu verschieben. Belies dich
    a) mal etwas zu TStream und deren Ableitungen
    b) zum Thema Klassenspeichern (siehe den Artikel oben)

    ich mag das ganze borland zeuch nur nich so richtig

    Das musst du mir erklären.... du arbeitet ja mit dem Builder oder mit Kylix oder?

    -junix



  • also wegen dem borland-zeuch: ich versuch ansich so wenig wie möglich davon zu benutzen um den quellcode portabel und 'nativ' damit jeder, auch der der ncih weis was ein stream ist den code lesen kann...

    Wegen den Zeigern in den Klassen:
    die klassen stammen von mir und sind mehr oder weniger nur Container:

    class CTest
    {
    public:
    String eins, zwei;
    int ieins, izwei;
    }
    

    ...so in der art.... man könnte ja auch strukturen nehmen....

    Wegen den strings. ich hab mal noch bissel im forum gesucht, da bin ich auf
    die funktionen: 'ComponentToString' & 'StringToComponent' gestoßen, habs nur nich hingebracht die auf meine klasse(n) um zu rödeln...ich hab mir so gedacht wenn man komplexe Komponenten als string speichern kann muss das auch mit meinen klassen gehen...

    oder sitze ich jetzt wieder einem irrtum auf?

    [Edit]

    String ClassToString(CTest *comp, int size)
    {
     AnsiString as;
     TMemoryStream* pms = new TMemoryStream();
     TStringStream* pss = new TStringStream(as);
    try
     {
    
     pms->WriteBuffer(comp,size);
        pms->Position = 0;
        ObjectBinaryToText(pms, pss);
        pss->Position = 0;
        String temp=pss->DataString;
        delete pms;
        delete pss;
        return temp;
     }
    

    hab das so versucht - bekommt immer eins mit der 'ungültiges-stream-format-keule'
    [/edit]

    [ Dieser Beitrag wurde am 27.12.2002 um 00:11 Uhr von unixman editiert. ]



  • Original erstellt von unixman:
    oder sitze ich jetzt wieder einem irrtum auf?

    allerdings... Hast du denn den Link den ich angegeben habe mal angeschaut? Mag nicht das ganze nochmal erklären, wenns Marc++us ja bereits - zu mindest in der Entwurffassung - in seinem Buch verewigt hat.

    -junix


Anmelden zum Antworten