Bonjour,

J'ai un souci pour envoyer une capture d'ecran par socket.
Voici mon code qui fait la capture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Voici mon code coté client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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