Oui j'y ai pensé...
En fait ça compile sans problème avec
ReceiveBuf du côté serveur mais j'ai l'impression que le fait d'utiliser
SendStream de l'autre côté ne génère pas d'événement
OnClientRead.
Du coup le prog ne passe jamais dans la fonction
ReceiveBuf... Je me demande si
SendStream ne doit pas être utilisé qu'en mode synchrone...
Du coup j'ai testé avec
SendBuf au lieu de
SendStream du côté client, ça compile toujours bien, et cette fois-ci
OnClientRead a bien lieu du côté serveur et je passe bien par la fonction
ReceiveBuf...
Génial ? Eh bien non, parce que la variable
stream que je fais transiter à travers le socket semble vide après sa lecture côté serveur avec
ReceiveBuf, alors que si je lis son contenu juste avant de l'envoyer du côté client, je récupère bien l'image contenue dans
stream et je suis tout à fait capable de l'afficher dans un objet TImage...
Mystère et boule de gomme

C'est la raison pour laquelle je cherche une méthode alternative pour réaliser cette fonction...
Si ça peut aider, voilà mon code :
//---------------------------------------------------------------------------
void __fastcall TForm1::CliSendClick(TObject *Sender)
{
if(ClientSocket1->Active) {
//J'ai mis une CheckBox pour sélectionner l'envoi du texte ou de l'image
if(!CheckBox1->Checked) ClientSocket1->Socket->SendText(Edit1->Text);
else {
TMemoryStream *stream =
new TMemoryStream();
Image1->Picture->Bitmap->SaveToStream(stream);
stream->Position=0;
Image2->Picture->Bitmap->LoadFromStream(stream);
//test du contenu de la variable stream
ClientSocket1->Socket->SendBuf(stream,
sizeof(stream));
stream->Free();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SrvSendClick(TObject *Sender)
{
if(ServerSocket1->Active) {
if(!CheckBox2->Checked) ServerSocket1->Socket->Connections[ComboBox1->ItemIndex]->SendText(Edit2->Text);
//ComboBox1 liste les clients connectés else {
TMemoryStream *stream =
new TMemoryStream();
Image2->Picture->Bitmap->SaveToStream(stream);
ServerSocket1->Socket->Connections[ComboBox1->ItemIndex]->SendBuf(stream,
sizeof(stream));
stream->Free();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
if(!CheckBox2->Checked) Label7->Caption = ClientSocket1->Socket->ReceiveText();
else {
TMemoryStream *stream =
new TMemoryStream();
ClientSocket1->Socket->ReceiveBuf(stream,
sizeof(stream));
stream->Position = 0;
Image1->Picture->Bitmap->LoadFromStream(stream);
stream->Free();
ShowMessage("reçu");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
//Affichage du texte...
if(!CheckBox1->Checked) Label8->Caption = ServerSocket1->Socket->Connections[ComboBox1->ItemIndex]->ReceiveText();
//...ou de l'image, selon l'état de la CheckBox
else {
TMemoryStream *stream =
new TMemoryStream();
ServerSocket1->Socket->Connections[ComboBox1->ItemIndex]->ReceiveBuf(stream,
sizeof(stream));
stream->Position = 0;
Image2->Picture->Bitmap->LoadFromStream(stream);
stream->Free();
ShowMessage("Reçu !");
//Affichage d'un message pour vérifier le passage dans la fonction
}
}
//---------------------------------------------------------------------------
M'enfin !...