salut à toutes et tous,
a l'aide du composant :
TidTCPClient nomé tcp dans le code sendstr ( code d'envoie)
TidTCPServer nomé tcp dans le code sendstr ( code reception)
je ne parvient pas a s'avoir qu'elle est le poste qui envoie !!!
au depart c'etait juste d'un poste vers un autre, mais je voudrai faire en sorte
que je puisse afficher les images (printscreen) de tout les ecrans du reseau sur mon ecran serveur. (programmation dynamique)
un seul detail me manque c'est la provenance !!
je ne veux pas creer un composant TidTCPServer pour chaque poste client dans mon programme serveur, car je ne connait pas d'avance le nombre de poste client, meme si je sais que c'est un maximum de 255 pc !
avec les composants socket c'est simple mais j'ai pas pu resussir a envoier un stream !
en lisant les valeur de Socket on obtient tout les info de l'expediteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //reception socket server et client void __fastcall TForm1::SocketRead(TObject *Sender, TCustomWinSocket *Socket)
mais avec ca j'ai aucune info !!
qui a une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //reception TidTCPServer void __fastcall TForm8::tcpExecute(TIdPeerThread *AThread)
grace a cette methode j'ai pu modifier mon ancien code qui lisait le fichier en binaire et que j'envoyais trame par trame pour le reconstituer au serveur.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 //***************************************** // CODE D ENVOIE //***************************************** void TForm1::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; // qualitie d'image voire propriéte 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(); } catch (...){} try { tcp->OpenWriteBuffer(); tcp->WriteStream(stream); tcp->CloseWriteBuffer(); stream->Free(); tcp->Disconnect(); } catch(...){} } //***************************************** // CODE RECEPTION //***************************************** void __fastcall TForm8::tcpExecute(TIdPeerThread *AThread) { TMemoryStream *stream = new TMemoryStream(); TJPEGImage *jpg = new TJPEGImage(); AThread->Connection->ReadStream(stream, -1, true); stream->Position =0; jpg->LoadFromStream(stream); Form5->espion->Picture->Graphic = jpg; stream->Free(); jpg->Free(); //******************************
parfois l'image etait floue et c'etait lent pour une parfaite qualité
ancien code quant meme :
il permet d'envoyer n'importe qu'elle un fichier d'un pc a un autre via socket
en lisant le contenu du fichier et l'envoi de cette lecture.
comment mettre des petit projet sur ce site ? si ca interresse qqn ?
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 //lecture binaire et envoie a l'aide d'un timer //********************************** void __fastcall TForm1::FCTTimer(TObject *Sender) { static int temp=0; // On envoi le fichier tant qu'on est pas a la fin if(!feof(FichierEnvoi)) { info_send->Caption = "Envoi en cours...."; memset(buf2, 0, SIZE); // vider le vecteur buf2 fread(buf2, 1, SIZE, FichierEnvoi); lecture du fichier et copie dans buf2 sec = (sec + FCT->Interval); if(sec==1000) { sec=0; min++; } if(min==60) { her++; min=0; } timer->Caption = AnsiString(her) + ":" + AnsiString(min);// + ":" + AnsiString(sec); Client->Socket->SendBuf(buf2,SIZE); } else { FCT->Enabled = false; temp = 0; sec=min=her=0; fclose(FichierEnvoi); Client->Socket->SendBuf("End_File",10); info_send->Caption = "Envoi Terminé"; } } //************************* //************************* //reception fichier via socket void __fastcall TForm8::SocketClientRead(TObject *Sender, TCustomWinSocket *Socket) { memset(buf, 0, 2048); Socket->ReceiveBuf(buf,2048); // message envoyé par un pc distant if( strstr(buf,"Start_File")!=NULL ) // Start_File == code debut d'un envoi { DeleteFile(chemin.c_str()); // efface de l'ancier fichier recu Form5->WAIT->Visible=true; // image indiquant qu'on recoit qqch char *ptr; ptr = strtok(buf,"-");// selon mon protocol d'envoi chemin = "c:\\" + AnsiString(ptr);// nom du fichier expediteur FichierRecu = fopen(chemin.c_str(), "ab");// ecriture binaire return; } if( strcmp(buf,"End_File")!=0 ) // tanqu'on recoi pas le code de fin { if(FichierRecu!=NULL) fwrite(buf, 1, 2048,FichierRecu); // ecriture dans un fichier en bianire } else { fclose(FichierRecu); Form5->WAIT->Visible=false; // contenu du ficher envoye termine } //*************************
merci d'avance
@+
Partager