Transfert fichier TCP/IP JAVA (erreur 1/10)

[Fermé]
Signaler
Messages postés
90
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
12 octobre 2012
-
Bonjour,
j'ai deux scripts en java qui me permet d'envoyer et recevoir des fichiers. (ci dessous) et les deux scripts marches, c'est à dire que j'arrive a envoyer des fichiers, mais le problème c'est que parfois (une fois sur dix) le téléchargement se bloque et ça fait tout bugger, donc si quelqu'un aurait une solutions je suis prenneur.
MERCI d'avance.

infos: "bar" c'est une barre de progression pour le client. (il y a une interface graphique).

SCRIPT CLIENT:

Variable:
static PrintWriter envoie;
String utilisateur;
static String HOST;
static int PORT;
static Socket socket;
BufferedReader in;
static BufferedInputStream inBuffer;
static InputStream input;
static BufferedOutputStream outBuffer;
static OutputStream out;

fonctions pour telecahrger:

private void recepFichier(String nomFichier){
try {
int lu;
String taille = in.readLine();
int tailleOctet = Integer.parseInt(taille);
bar.setMaximum(tailleOctet);
System.out.println("taille du fichier: "+taille+"// conversion int ->"+tailleOctet);
setReceptionServeur("Taille en Octet du fichier: "+tailleOctet);

//Création de l'entrée
input = socket.getInputStream();
out = new FileOutputStream("/home/jerome/DL/"+nomFichier);
//Reçoit du client
inBuffer = new BufferedInputStream(input);
//Envoi vers le fichier
outBuffer = new BufferedOutputStream(out);
lu = 0;
int compteur = 0;
setReceptionServeur("Téléchargement de <"+MessageRecu+"> ...");
while(lu > -1){
bar.setValue(compteur);
lu = inBuffer.read();
outBuffer.write(lu);
compteur++;

if (compteur == tailleOctet){
lu = -1;
bar.setValue(tailleOctet);
}
}
outBuffer.flush();
//outBuffer.close();
//inBuffer.close();
out.flush();
//out.close();
//input.close();

setReceptionServeur("Le téléchargement terminée.");
File fichier=new File("/home/jerome/DL/"+nomFichier);
if (fichier.exists()){
setReceptionServeur("Le fichier à été correctement téléchargé.");
}else{
setReceptionServeur("Impossible de vérifier l'existence du fichier.");
}
setReceptionServeur("Fin des opérations.");
System.out.println("fini" );
} catch (IOException e1) {
System.out.println("Erreur: "+e1);
}
}

SCRIPT SERVEUR:

private void envoieFichier(String nomFichier){
try {
DataSender = new PrintStream(socket.getOutputStream());

File f = new File(dir+"/"+nomFichier);
if (f.exists()){
System.out.println("Envoi du fichier " + f.getName());
long taillefichier =f.length();

out.println(taillefichier);//on envoie la taille du fichier au client
out.flush();

System.out.println("Taille : "+ taillefichier);
long nbpassagesuposé=taillefichier / 8192;
System.out.println("Passages supposés : "+nbpassagesuposé);
InputStream in = new BufferedInputStream(new FileInputStream(f));
ByteArrayOutputStream tableaubytes = new ByteArrayOutputStream();
BufferedOutputStream tampon = new BufferedOutputStream(tableaubytes);
int lu = in.read();
int[] aecrire = new int[8192];
int compteur = 0;
long ouonestrendu=0;
//Tant qu'on est pas à la fin fichier
while(lu > -1){
//On lit les données du fichier
aecrire[compteur] = lu;
lu = in.read();
compteur++;
//Quand on a rempli le tableau, on envoie un paquet de 8192 octets
if(compteur == 8192){
compteur=0;
ouonestrendu++;
//On remplit le tampon
for(int x=0;x<8192;x++)
tampon.write(aecrire[x]);
//Et on l'envoie
DataSender.write(tableaubytes.toByteArray());
tableaubytes.reset();
System.out.println("Avancement : "+(float) ouonestrendu/nbpassagesuposé * 100+"%" );
}
}
//On envoie le dernier paquet, qui ne fait pas forcément 4096 octets
//On remplit le tampon
for(int x=0;x<compteur;x++){
tampon.write(aecrire[x]);
}
//Et on l'envoie
tampon.flush();
tampon.close();

DataSender.write(tableaubytes.toByteArray());

DataSender.flush();
System.out.println("Avancement: "+(float) ouonestrendu/nbpassagesuposé * 100+"%" );
System.out.println("fini" );

tableaubytes.reset();
out.flush();
//in.close();
//DataSender.close();

System.out.println("Passages effectués : "+ouonestrendu);
}else{
out.println("PASDEFICHIER");
out.flush();
System.out.println("le fichier est introuvable: "+f);
}
}catch (IOException e){
System.out.println("erreur : "+e);
}
}


<config>Linux / Google Chrome</config>