[Server/Client] Buffer sending ....



  • Hi,
    Ich versuche mom. einen Buffer über die Stand. Klassen Server/Client Socket vom Cbuilder zu schreiben.

    Ich habe eine Strukur die eine Variable vom type void* hat der ich dann jegliche Datentypen zuweise und dann verschicke.

    Mein prob. ist, dass in void* nicht das ankommt was ankommen soll 😞 es komm nix an... die anderen Variablen enthalten aber die anderen Werte...

    vielleicht findet ihr den Fehler.

    PS: Texte kann ich richtig senden.

    Code:
    [code]
    //---------------------------------------------------------------------------
    //----------------------------- TYPES --------------------------------------
    //---------------------------------------------------------------------------

    #define MSGTYPE_INFO 1

    //---------------------------------------------------------------------------
    //----------------------------- STRUCT --------------------------------------
    //---------------------------------------------------------------------------

    struct MSGBUFFER
    {
    DWORD dwType;
    DWORD dwBufsize;
    void *buf;

    DWORD dwPort;
    AnsiString sHost;
    AnsiString sAddr;
    };

    ClientSocket:

    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    MSGBUFFER msgBuffer;

    AnsiString sText = "hallo test";

    msgBuffer.dwType = MSGTYPE_INFO;
    msgBuffer.dwBufsize = sizeof( sText );
    msgBuffer.buf = (AnsiString*)malloc( msgBuffer.dwBufsize );
    memcpy( msgBuffer.buf, &sText, msgBuffer.dwBufsize );

    ClientSocket->Socket->SendBuf( &msgBuffer, sizeof( msgBuffer ) );

    free( &msgBuffer );

    }

    ServerSocket:

    void __fastcall TForm1::ServerSocketClientRead(TObject *Sender,
    TCustomWinSocket *Socket)
    {
    Label2->Caption = "Client Read";

    MSGBUFFER msgBuffer;
    Socket->ReceiveBuf( &msgBuffer, Socket->ReceiveLength() );

    AnsiString a;
    a = (AnsiString
    )msgBuffer.buf;

    Edit1->Text = (*a);//IntToStr( msgBuffer.dwBufsize );
    }

    [/code]

    Bye



  • Logisch, du versendest ja auch nicht den Inhalt des Speichers auf den buf zeigt sondern die Adresse des Speichers auf den buf Zeigt... der Server hat logischerweise nicht im Speicher, was der Client da stehen hat und ecco.

    Das Selbe Problem gilt übrigens für das Versenden von Klassen etc. Vielleicht solltest du an deinem Protokoll noch etwas feilen (o;

    -junix



  • Und wir schaffe ich das, alles versendet wird ?

    Bye



  • Da musst du das Struct extra auswerten natürlich... oder statisch eine gewisse Zahl von Bytes in einem array reservieren...
    Wobei ich dir davon, dass das Struct zu versenden, das kann ganz schön ins Auge gehen (Stichwort Byte-Alignment)

    Definiere ein besseres Protokoll...

    -junix


Anmelden zum Antworten