J'essais d'envoyer divers fichiers sur mon réseau grace aux sockets, les fichiers sont bien transférés mais ils sont modifiés.
Exemple d'un screenshot après réception:
voici le code qui envois l'image :
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 int raffraichissementEcran( SOCKET csock ) { FILE* fichier = NULL ; int octelEnvoye = 0 , iVideChaine = 0 , i = 0 ; char carac = ' ' , tailleEnChar[30]=""; char messageAEnvoyer[1024]=""; long size; /****************************** ici le code qui fait le screen et l'enregistre sous shot.bmp ******************************/ fichier = fopen ( "shot.bmp" , "rb" ); if ( fichier != NULL ) { printf ( "\nEnvois fichier\n" ) ; //permet de connaitre la taille du fichier fseek(fichier, 0, SEEK_END); size = ftell(fichier); fseek(fichier, 0, SEEK_SET ); //transforme cette taille en char sprintf(tailleEnChar, "%d", size); //envois la taille du fichier iVideChaine = send(csock, tailleEnChar, sizeof(tailleEnChar), 0); //envois les donnée tant que la taille n'a pas été dépasser do { fread(messageAEnvoyer, 1, 1024, fichier); octelEnvoye = octelEnvoye + send(csock, messageAEnvoyer, 1024, 0); printf ( "\n%d/%d " , octelEnvoye ,size ); }while ( octelEnvoye < size ); //fermeture du fichier fclose(fichier); printf ( "\n\nFin envois\n" ) ; } else { printf ( "\nErreur ouverture fichier" ) ; } }
voici le code qui reçoit l'image :
Merci d'avance
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 void __fastcall TForm1::ButtonRaffraichissementImageClick(TObject *Sender) { char ChaineRecus[1024] = "" ; int testReussite , taille = 0, octelRecus = 0 ; FILE *fichier = NULL ; fichier = fopen("shoot.bmp","wb"); ListBoxDiaogue->Items->Add(" Demande de rafraichissement"); testReussite = send(sock, "dmdImg", 8, 0); if (testReussite == -1) { Application->MessageBox("Echec envoi message de raffraichissement","Erreur", MB_OK); ListBoxDiaogue->Items->Add("Erreur : demande raffraichissement non envoyée"); } else { ListBoxDiaogue->Items->Add("Demande raffraichissement envoyée"); //reçoit la taille du fichier recv(sock, ChaineRecus, sizeof(ChaineRecus) , 0); //affiche puis transforme la taille en entier TexteOctelsARecevoir->Text = ChaineRecus ; taille = TexteOctelsARecevoir->Text.ToInt() ; //reçoit les donnée tant que la taille n'a pas été dépasser do { octelRecus = octelRecus + recv(sock, ChaineRecus, sizeof(ChaineRecus) , 0); fwrite (ChaineRecus, 1, sizeof(ChaineRecus), fichier); }while (octelRecus < taille ); } //fermeture du fichier fclose(fichier); //affichage de l'image ImageScreemShot->Picture->LoadFromFile( "shoot.bmp" ) ; }
Partager