probleme transfert binaire avec socket c

probleme transfert binaire avec socket c - C - Programmation

Marsh Posté le 21-01-2011 à 12:44:33    

Bonjour,
 
 
j'ai réussi a transférer des gros fichiers binaire a travers les socket c mais malheureusement la taille du buffer que je met dans le buffer de recv et de send ne doit pas dépasse 4 octets sinon le fichier est corrompus lors du transfert
 
voici le code ma fonction upload coté serveur
 

Code :
  1. int upload(const char* fichier,int socket,int buff)
  2. {
  3. FILE *fs;
  4. int octet_envoye;
  5. int taille_fichier;
  6. unsigned char *buffer;
  7.  fs = fopen(fichier, "rb" );
  8. int deplacement=50;
  9.     fseek(fs, 0, SEEK_END);
  10.     taille_fichier =  ftell(fs);
  11.     buffer = malloc(buff);
  12.     fseek(fs, 0, SEEK_SET);
  13.     int octet_total=0;
  14. int taille_temporaire=ftell(fs);
  15. while  (taille_temporaire!=taille_fichier)
  16.    {
  17.     fread(buffer,sizeof(char),buff,fs);
  18. octet_envoye=send(socket, buffer, sizeof(buffer), 0);
  19. if(octet_envoye<0)
  20. {
  21.  perror("erreur de send" );
  22.  return 1;
  23. }
  24. printf("le nombre d'octet envoyé est %d\n",octet_envoye);
  25. taille_temporaire=ftell(fs);
  26. octet_total+=octet_envoye;
  27. printf("nombre total d'octet envoye est %d \n",octet_total);
  28.      printf("voici la taille temporaire est %d\n",taille_temporaire);
  29.      printf("le nombre d'octet envoyé est %d\n",octet_envoye);
  30.  
  31. return 0;
  32. }


 
 
voici le code de ma fonction téléchargement coté client
 

Code :
  1. int telechargement(const char *fichier,int socket,int buff)
  2. {
  3.   FILE* fd;
  4. unsigned char *buffer;
  5. buffer=malloc(buff);
  6. fd=fopen(fichier,"ab" );
  7. int octet_recu=0;
  8. int taille_fichier=65115;
  9. fseek(fd, 0, SEEK_SET);
  10. int taille_temporaire=ftell(fd);
  11. taille_temporaire=0;
  12. while(taille_temporaire<=taille_fichier)
  13. {
  14. octet_recu=recv(socket, buffer, sizeof(buffer), 0);
  15. if(octet_recu<0)
  16. {
  17. perror("erreur recv" );
  18. }
  19. printf("le nombre d'octet reçu est %d\n",octet_recu);
  20. fwrite(buffer,sizeof(char),buff,fd);
  21. taille_temporaire=ftell(fd);
  22. printf("la taille temporaire est %d \n",taille_temporaire);
  23. }
  24. fclose(fd);
  25. return 0;
  26. }


 
 
merci[cpp][/cpp]

Reply

Marsh Posté le 21-01-2011 à 12:44:33   

Reply

Marsh Posté le 21-01-2011 à 13:08:18    

On pourrait voir comment tu créé la socket?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-01-2011 à 13:37:18    

unsigned char *buffer;


 
sizeof(buffer) vaut donc la taille d'un pointeur donc généralement 4 en 32 bit.
 
Utilise plutôt ton entier "buff" pour connaitre la taille du buffer

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed