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

  FORUM HardWare.fr
  Programmation
  Java

  [ java ] transfert de fichiers dans un socket

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ java ] transfert de fichiers dans un socket

n°424171
bmanu
Posté le 11-06-2003 à 19:39:59  profilanswer
 

je transfere des fichiers binaires dans un socket avec approximativement ce code :
 

Code :
  1. FichierSocket = new Socket(ipClient, 10021);
  2.       outFichier = new BufferedOutputStream(FichierSocket.getOutputStream());
  3.  
  4.       outFichier1.flush();
  5.       try {
  6.         BufferedInputStream temp = new BufferedInputStream(new FileInputStream(MonFichier), tailleFichier);
  7.         int len = 0;
  8.         int tailleTampon = tailleFichier;
  9.          byte[] tampon = new byte[tailleTampon];
  10.         len = temp.read(tampon, 0, tailleTampon);
  11.         outFichier.write(tampon, 0, len);
  12.         outFichier.flush();
  13.         System.out.println(len + " bytes ont ete envoyes correctement" );
  14.         //     }
  15.       }
  16.       catch
  17.           (IOException e) {
  18.         System.out.println("impossible d'ouvrir le fichier" );
  19.       }
  20.       outFichier.close();
  21.       outFichier1.close();
  22.       FichierSocket.close();
  23.     }


 
 
et je le recois
 
avec un code similaire

Code :
  1. byte[] tampon = new byte[tailleInt];
  2.           int len = 0;
  3.           int total = 0 ;
  4.           len = in.read(tampon, len, tailleInt);


 
 
 
le probleme et que le transfert se deroule correctement de temps en temps, mais est souvent corrompu : il manque souvent 10 ko au fichier final...
 
 
qu'est ce qu'il ne va pas ? y a t-ildes buffers a vider qqpart ?
 
merci


Message édité par bmanu le 11-06-2003 à 23:47:39
mood
Publicité
Posté le 11-06-2003 à 19:39:59  profilanswer
 

n°425058
qxn
Posté le 12-06-2003 à 14:16:06  profilanswer
 

bmanu a écrit :

je transfere des fichiers binaires dans un socket avec approximativement ce code :
 

Code :
  1. FichierSocket = new Socket(ipClient, 10021);
  2.       outFichier = new BufferedOutputStream(FichierSocket.getOutputStream());
  3.  
  4.       outFichier1.flush();
  5.       try {
  6.         BufferedInputStream temp = new BufferedInputStream(new FileInputStream(MonFichier), tailleFichier);
  7.         int len = 0;
  8.         int tailleTampon = tailleFichier;
  9.          byte[] tampon = new byte[tailleTampon];
  10.         len = temp.read(tampon, 0, tailleTampon);
  11.         outFichier.write(tampon, 0, len);
  12.         outFichier.flush();
  13.         System.out.println(len + " bytes ont ete envoyes correctement" );
  14.         //     }
  15.       }
  16.       catch
  17.           (IOException e) {
  18.         System.out.println("impossible d'ouvrir le fichier" );
  19.       }
  20.       outFichier.close();
  21.       outFichier1.close();
  22.       FichierSocket.close();
  23.     }


 
 
et je le recois
 
avec un code similaire

Code :
  1. byte[] tampon = new byte[tailleInt];
  2.           int len = 0;
  3.           int total = 0 ;
  4.           len = in.read(tampon, len, tailleInt);


 
 
 
le probleme et que le transfert se deroule correctement de temps en temps, mais est souvent corrompu : il manque souvent 10 ko au fichier final...
 
 
qu'est ce qu'il ne va pas ? y a t-ildes buffers a vider qqpart ?
 
merci


 
je c'est que je ne reponds pas a ta question mais pour eviter ce genre de probleme utilise un ObjectOutputStream qui te permet d'envoyer via le reso des objets complet qui implement l'interface Serializable ... et matte dans la Doc FILE implemente Serialisable et le tutor de sun d'explique comment faire sinon un bou de code que j'utilise ne ce moment :
 

Code :
  1. public static int envoieFichier(Socket recep,File fichier)
  2. {
  3.  try
  4.  {
  5.   OutputStream lec = recep.getOutputStream();
  6.    ObjectOutputStream out = new ObjectOutputStream(lec);
  7.    out.writeObject(fichier);
  8.    out.flush();
  9.    out.close();
  10.    lec.close();
  11.   return 1;
  12.  }
  13.  catch (IOException fic)
  14.  {
  15.   System.out.println("Erreur dans envoieFichier :" + fic.getMessage());
  16.   return -1;
  17.  }
  18. }


 
reception meme principe

n°428631
bmanu
Posté le 16-06-2003 à 00:07:42  profilanswer
 

j'ai regle mon probleme : au lieu d'envoyer tout le fichier d'un coup, je fragmente tous les 4096 bytes, et j'attends un accuse de reception avant de passer au paquet suivant

n°428635
benou
Posté le 16-06-2003 à 00:15:09  profilanswer
 

bmanu a écrit :

j'ai regle mon probleme : au lieu d'envoyer tout le fichier d'un coup, je fragmente tous les 4096 bytes, et j'attends un accuse de reception avant de passer au paquet suivant


ca sert à rien d'attendre un accusé de réception : C'est du TCP/IP : t'es sûr que les packets arrivent dans le bon ordre.
 
par contre, les envoyés par petit bout est une (tres) bonne idée.


---------------
ma vie, mon oeuvre - HomePlayer

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

  [ java ] transfert de fichiers dans un socket

 

Sujets relatifs
[Java] erreur sous IntelliJ IDEA, sous Jbuilder non...Applet JAVA dans du DHTML
Petite aide pour la réalisation d'un sniffer en JAVA[java] rafraichissement jframe + info optimisation [OK]
[MSDOS]Comparaison de fichiers sous dos (comp)[C] socket / file des.
relais brisé (socket)[ java ] ecouteur sur un repertoire
[java] sortie dans un fichier excel?[C] Socket UDP connaitre le port source ???
Plus de sujets relatifs à : [ java ] transfert de fichiers dans un socket


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