fichiers modifiés après passage par socket
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:
http://www.hiboox.com/images/0607/f060213e.jpg
voici le code qui envois l'image :
Code:
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:
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 ;)