Envoi d'une capture d'ecran par socket
Bonjour,
J'ai un souci pour envoyer une capture d'ecran par socket.
Voici mon code qui fait la capture :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
/* Prend la résolution utlisé */
int ScrW=Screen->Width, ScrH=Screen->Height;
/* Applique la résolution */
CopieFond->SetBounds(0,0,ScrW,ScrH);
/* Capture l'ecran */
HWND hWnd = GetDesktopWindow();
HDC hDC = GetDC(hWnd);
/* Copie la capture dans le TImage */
BitBlt(CopieFond->Canvas->Handle,0,0,ScrW,ScrH,hDC,0,0,SRCCOPY);
ReleaseDC(hWnd,hDC);
CopieFond->Height = 480;
CopieFond->Width = 640; |
Tout ca marche très bien, mais j'aimerai envoyer cette capture par socket.
J'utilise donc un flux pour l'envoyer :
Code:
1 2 3 4
|
TMemoryStream *stream = new TMemoryStream();
CopieFond->Picture->Bitmap->SaveToStream(stream);
Socket->SendStream(stream); |
En fait le problème ce situe niveau client.
L'évenement OnRead du socket n'est jamais déclenché.
Par contre si j'utilise ce code coté serveur :
Code:
1 2 3 4 5
|
TMemoryStream *stream = new TMemoryStream();
CopieFond->Picture->Bitmap->SaveToFile("test.bmp");
stream->LoadFromFile("test.bmp");
Socket->SendStream(stream); |
Le client reçoit bien les données mais pas complétement :4.27 ko sur 3Mo :koi:
Voici mon code coté client :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
TMemoryStream *Stream = new TMemoryStream();
while (Socket->ReceiveLength())
{
int len = Socket->ReceiveLength();
/* buffer de réception */
char *buf = new char[len];
/* Reception données */
Socket->ReceiveBuf(buf, len);
/* Ecriture du buf dans le flux */
Stream->Write(buf, len);
delete(buf);
}
CopieFond->Picture->Bitmap->LoadFromStream(Stream); |
Donc si quelqu'un peut m'eclairer...
Merci d'avance :mrgreen: