Graphics::TBitmap() per TCP senden?



  • hallo

    ich habe ein Graphics::TBitmap() objekt und möchte den ihalt nun per TCP von einem server zu einem client senden damit der client es in einem TImage darstellen kann. wie geht sowas?



  • Mit den Komponenten vom C++Builder oder von INDY einfach den Speicherbereich senden.



  • ich kriege irgendwie beim server eine zugriffsverletzung sobald ein client connected. anbei etwas code:

    server

    Das ganze ist in einem timer. stream ist vom type TMemoryStream..

    ...
    ...
    ...
    bmp->SaveToStream(stream);
       	for(int i = 0; i < ServerSocket1->Socket->ActiveConnections; i++)
       	{
            if(stream != NULL)
            {
        		ServerSocket1->Socket->Connections[i]->SendStream(stream);
            }
       	}
    

    client

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TMemoryStream *stream;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    	Socket->ReceiveBuf(stream, stream->Size);
    	Image1->Picture->Bitmap->LoadFromStream(stream);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    	stream = new TMemoryStream();
        ClientSocket1->Open();	
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    	delete stream;
    }
    //---------------------------------------------------------------------------
    

    ne idee was ich falsch mache? zugriffsverletzung lesen/schreiben von 0000000. das klingt irgendwie wie ein ungerichteter zeiger 😮



  • Keine Ahnung, ob das was mit der Meldung zu tun hat, aber achte mal drauf, Stream->Position (wieder) auf 0 zu setzen bzw. das zu kontrollieren, bevor du ihn abschickst.


Anmelden zum Antworten