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 :

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" ) ;
 
}
Merci d'avance