Soyez le premier à donner votre avis sur cette source.
Vue 11 026 fois - Téléchargée 1 008 fois
// Partie client : code de unit1.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <jpeg.hpp> //inclusion de jpeg.hpp //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- //Définition de la procedure qui capture l'écran et converti en jpg //puis envois le tout par tcp void sendstr() { TMemoryStream *stream = new TMemoryStream(); TJPEGImage *jpg = new TJPEGImage(); Graphics :: TBitmap *bmp = new Graphics :: TBitmap(); TRect *rect = new TRect(); TPicture *img = new TPicture(); img->Bitmap->Height = Screen->Height; img->Bitmap->Width = Screen->Width; int scrw = Screen->Width, scrh = Screen->Height; HWND hwnd = GetDesktopWindow(); HDC hDC = GetDC(hwnd); BitBlt(img->Bitmap->Canvas->Handle,0,0,scrw,scrh,hDC,0,0,SRCCOPY); try { jpg->Assign(img->Bitmap); jpg->CompressionQuality = 15; bmp->Width = jpg->Width -50; bmp->Height = jpg->Height -50; rect->Left = 0; rect->Top = 0; rect->Right = bmp->Width-1; rect->Bottom = bmp->Height-1; bmp->Canvas->StretchDraw(*rect,jpg); jpg->Assign(bmp); jpg->SaveToStream(stream); jpg->Free(); bmp->Free(); img->Free(); } catch (...) { } try { Form1->tcp->OpenWriteBuffer(); Form1->tcp->WriteStream(stream); Form1->tcp->CloseWriteBuffer(); stream->Free(); Form1->tcp->Disconnect(); } catch(...) { } } __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { try { // Edit2->Text.ToIntDef(1000) converti la chaine contenue dans Edit2 en Entiers //Si la conversion n'est pas possible l'interval prend la valeure 1000 Timer1->Interval = Edit2->Text.ToIntDef(1000) ; tcp->Host = Edit1->Text; Timer1->Enabled = true; } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { try { Timer1->Enabled = false; } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { try { tcp->Connect(); sendstr(); } catch(...) { Timer1->Enabled = false; ShowMessage("Connexion Impossible"); } } //Partie serveur : code de unit1.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <jpeg.hpp> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::tcpExecute(TIdPeerThread *AThread) { TMemoryStream *stream = new TMemoryStream(); TJPEGImage *jpg = new TJPEGImage(); AThread->Connection->ReadStream(stream, -1, true); //réception du stream stream->Position =0; jpg->LoadFromStream(stream); Image1->Picture->Graphic = jpg; //affichage dans TImage stream->Free(); jpg->Free(); }
mais comment le recevoir avec le server socket? puisqu'il n'y a pas de ServerSocket->Socket->ReceiveStream(stream). est ce que quelqu'un pourrait m'aider. Dans tous les cas ta source est vraiment bien réaliser. je t'ai mis 10/10. Merci
j'avais faite un code en c/c++ builder permettant de faire un screenshot, tes 3 petite ligne mon fait rappellé ua mien ;-) , jsute que je tansferai le fichier en lecture binaire via socket !!
parfois le fichier etait erronné ! avec ton code je vais essayer de faire plusieur transfer en meme temp , un reseau qui envoie leur capture vers un seul poste !
1°) question comment savoir la provennance du fichier envoyé
2°) peux envoyé une video d'une webcame par exemple d'un pc distance
je travaille sur c/c++ builder
merci
@+
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.