[ java ] transfert de fichiers dans un socket

transfert de fichiers dans un socket [ java ] - Java - Programmation

Marsh Posté le 11-06-2003 à 19:39:59    

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
Reply

Marsh Posté le 11-06-2003 à 19:39:59   

Reply

Marsh Posté le 12-06-2003 à 14:16:06    

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

Reply

Marsh Posté le 16-06-2003 à 00:07:42    

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

Reply

Marsh Posté le 16-06-2003 à 00:15:09    

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
Reply

Sujets relatifs:

Leave a Replay

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