Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1040 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  probleme d'envoi de fichiers binaires dans une app client/serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme d'envoi de fichiers binaires dans une app client/serveur

n°217833
gaaar
Posté le 20-09-2002 à 17:14:24  profilanswer
 

Salut
 
J'ai fait une application (sous linux) qui envoie un fichier binaire (avec la fonction send())
à une autre appli (qui le réceptionne avec la fonction recv())
 
Problème : les 2 fichiers ne sont pas identiques
           tous les octets des 2 fichiers sont différents  
 
(le fichier réceptionné fait bien la même taille que l'original)
 
Quelqu'un saurait-il ce qu'il faut faire pour échanger correctement 2 fichiers binaires ?

mood
Publicité
Posté le 20-09-2002 à 17:14:24  profilanswer
 

n°217854
zi_ril_wan​ou
Posté le 20-09-2002 à 17:55:09  profilanswer
 

gaaar a écrit a écrit :

Salut
 
J'ai fait une application (sous linux) qui envoie un fichier binaire (avec la fonction send())
à une autre appli (qui le réceptionne avec la fonction recv())
 
Problème : les 2 fichiers ne sont pas identiques
           tous les octets des 2 fichiers sont différents  
 
(le fichier réceptionné fait bien la même taille que l'original)
 
Quelqu'un saurait-il ce qu'il faut faire pour échanger correctement 2 fichiers binaires ?




 
Pourrais tu nous montrer les 4 premiers et 4 derniers octets d'un fichier envoyé et ce qui est reçu ? (je suspecte un problème de conversion little/big endian)


---------------
Get the Cooool... Get the cool shoe-shine !
n°217857
Geoges
Posté le 20-09-2002 à 18:07:34  profilanswer
 

les machines emettrices et receptrices sont elles identiques ? normalement il faut faire un encodage (xdr par exemple) avant de balancer des infos...

n°217863
gaaar
Posté le 20-09-2002 à 18:29:47  profilanswer
 


 
zi_ril_wanou >  
 
fichier source : 4 premier octets -> fc19fc19
                 4 dernier        -> 0226000    
 
fichier recu   : 4 premier octets -> 00000000
                 4 dernier        -> 06000600
 
georges > Les machines emettrices et receptrices sont bien identiques
 

n°217867
Geoges
Posté le 20-09-2002 à 18:33:19  profilanswer
 

as-tu testé le code retour su send et du recv ? il disent quoi ?

n°217873
gaaar
Posté le 20-09-2002 à 18:40:00  profilanswer
 


 
Codes de retour send()/recv() corrects :
 
ils contiennent bien le bon nombre d'octets envoyés/recus
de chaque émission/réception.
 
Le fichier source et celui réceptionné contiennent d'ailleurs
exactement le même nombre d'octets.

n°217879
juju-le-ba​rbare
Posté le 20-09-2002 à 18:46:40  profilanswer
 

gaaar a écrit a écrit :

 
 
Codes de retour send()/recv() corrects :
 
ils contiennent bien le bon nombre d'octets envoyés/recus
de chaque émission/réception.
 
Le fichier source et celui réceptionné contiennent d'ailleurs
exactement le même nombre d'octets.




 
C'est en TCP ou UDP ? Si c'est UDP, c'est normal !
D'aillleurs NFS utilise UDP, en faisant une vérification...


Message édité par juju-le-barbare le 20-09-2002 à 18:47:13

---------------
Du temps à perdre ? -> http://www.juju-le-barbare.fr.fm
n°217882
gaaar
Posté le 20-09-2002 à 18:50:44  profilanswer
 


 
C'est du tcp...

n°217883
Geoges
Posté le 20-09-2002 à 19:00:38  profilanswer
 

Purée ça se corse  :p  
 
Peux-tu nous faire un petit copier/coller des deux bouts de code de reception et d'emission ?  :jap:  :jap:


Message édité par Geoges le 20-09-2002 à 19:00:53
n°217884
gaaar
Posté le 20-09-2002 à 19:02:01  profilanswer
 


 
Je stocke les données recues dans une variable du genre
'char buffer[TAILLE_MAX]'
Puis je les écrit dans un fichier avec write()
 
Est-ce qu'il ne pourrait pas y avoir un problème à ce niveau ?
 
(J'ai essayer avec un tableau de unsigned char,  
mais ça n'a rien changé)

mood
Publicité
Posté le 20-09-2002 à 19:02:01  profilanswer
 

n°217887
Geoges
Posté le 20-09-2002 à 19:04:20  profilanswer
 

ben ce que je me dis c'est que soit :
   - tu n'envoies pas le bon buffer,
   - tu n'ecris pas le buffer que tu as recu...
mais bon c'est une simple supposition.

n°217888
gaaar
Posté le 20-09-2002 à 19:08:48  profilanswer
 


EMISSION :
 
fdesc = open(nom_fichier, O_RDONLY);
while((ret_read = read(fdesc, tampon_envoi, sizeof(tampon_envoi))) > 0)
  {
    ret_send = send(desc, tampon_envoi, ret_read, 0);
    if(ret_send == ERREUR)
    {
      cout<<"erreur send : "<<strerror(errno)<<endl;
      exit(0);
    }
  }
 
 
RECEPTION :
  fdesc = creat(fichier, S_IRUSR|S_IWUSR);
  nb_octet_recu = 0;
  do
  {
    ret_recv = recv(desc, tampon_reception, sizeof(tampon_reception), 0);
    if(ret_recv < 0)
    {
      cout<<"erreur recv() : "<<strerror(errno)<<endl;
      close(desc);
      exit(0);
    }
    tampon[ret_recv] = 0;
 
    if(write(fdesc, tampon_reception, ret_recv) == ERREUR)
    {
      cout<<"erreur lors de l'écriture dans le fichier "<<fichier<<" : "<<strerror(errno)<<endl;
      close(desc);
      close(fdesc);
      exit(0);
    }
    nb_octet_recu += ret_recv;
  }while(ret_recv && (taille_inconnue || (nb_octet_recu < taille_fichier)));

n°217903
Geoges
Posté le 20-09-2002 à 19:32:48  profilanswer
 

je dois sortir la, je regarderai plus tard ce soir si tu as pas trouve

n°218069
Geoges
Posté le 21-09-2002 à 10:56:56  profilanswer
 

grrrr je sèche là, ça m'a l'air tout bon tout ça.
personne a une idée ?
quand c'est comme ca, je fais des trucs bourrins en general, genre tracer les buffers que j'envoie et ceux que je recois, c'est pas brillant mais ca peut permettre de cibler le truc et trouver une idee.


Message édité par Geoges le 21-09-2002 à 10:58:53
n°218700
gaaar
Posté le 23-09-2002 à 10:53:19  profilanswer
 


Problème résolu !
 
J'ai enfin trouvé l'erreur :)
(un peu long à expliquer, j'utilisais un sizeof()
quand il fallait un strlen(), tout ça avant le code
que j'ai publié ici)
 
 
Merci à ceux qui se sont intéressés à mon problème.
:hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  probleme d'envoi de fichiers binaires dans une app client/serveur

 

Sujets relatifs
upload multiple de fichiers ou de repertoireUtilisation d'une union : probleme
problème de connexion base mysql en php (easyphp 6)Problème de Somme (suite)
C++ : gros probleme avec les unions !Problème de somme dans requête SQL
[HTML,JSP] Problème methode post[HTML] Problème d'interface
Probleme de replaceAll()Importation de fichiers .dbf
Plus de sujets relatifs à : probleme d'envoi de fichiers binaires dans une app client/serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR