[C++ Builder] SendBuff avec BMP

Résolu/Fermé
afrodje Messages postés 759 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 22 janvier 2014 - 20 mars 2008 à 12:08
afrodje Messages postés 759 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 22 janvier 2014 - 4 avril 2008 à 15:56
Bonjour,

Je voudrais transmettre un fichier image (bmp) avec le composant Tsocketserveur et TSocketclient.
Voici mon code serveur (envoi du fichier) :

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   ServerSocket->Port = 10000;
   ServerSocket->Open();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::charge_image(TObject *Sender)
{

   AnsiString chemin_absolu;
   OpenPictureDialog1->Execute();
   //Form1->TImage1->Picture->LoadFromFile("mon_image.jpg");
   Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);


}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{

                        //envoi de l'image en créant un buffer (zone memoire)
                        TMemoryStream *stream = new TMemoryStream();
                        Image1->Picture->Bitmap->SaveToStream(stream);
                        ServerSocket->Socket->SendBuf(stream->Memory, stream->Size);
                        delete stream;

}



Et voici la reception du client (une partie du code) :

void __fastcall TForm1::ClientSocketRead(TObject *Sender,
      TCustomWinSocket *Socket)
{

     //recoi l'image
     TMemoryStream *stream = new TMemoryStream();
     char Buffer[500000];
     int Count;
     while (Count = ClientSocket->Socket->ReceiveBuf(Buffer, sizeof(Buffer)) != -1)
     {
            // stream->Write(Buffer, sizeof(Buffer));
             stream->Write(Buffer, Count);
             Sleep(1000);
     }
     stream->Position = 0;
     Image1->Picture->Bitmap->LoadFromStream(stream);
     delete stream;
}



Et voici l'erreur généré : http://images3.hiboox.com/images/1208/swow6rgb.jpg
A voir également:

1 réponse

Nico de ta classe
4 avril 2008 à 15:43
void __fastcall TForm1::Button2Click(TObject *Sender)
{

//envoi de l'image en créant un buffer (zone memoire)
TMemoryStream *stream = new TMemoryStream();
Image1->Picture->Bitmap->SaveToStream(stream);
ServerSocket->Socket->Connection[0]->SendBuf(stream->Memory, stream->Size);
delete stream;

}


Voila là sa devrait marché, il faut que tu précises au ServerSocket à quelle connection tu veux envoyé ton stream. J'ai réussi cet après midi.

Merci à toi ;)
1
afrodje Messages postés 759 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 22 janvier 2014 168
4 avril 2008 à 15:56
oups, j'avais oublié de refermé ce post et de mettre la solution.

Merci @+
0