Bonjour, j'ai codé une application qui transfert des fichiers du client au servuer en utilisant les socket, cependant j'ai un petit problème, avant toute chose, voici les codes:

client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void run() {
		// TODO Auto-generated method stub
		try {
			System.out.println("thread client lance");
		while((instruction = in.readLine()) != null) {
 
			if(Pattern.matches("^copier>.+$", instruction)) { //si on demande de copier
				Pattern p = Pattern.compile(">");
				String[] item = p.split(instruction); //on isole le chemin du fichier
				File fichier = new File(item[1]);
				if(fichier.exists()) {
					long taille = fichier.length(); //on obetient la taille du fhichier
				reader = new FileInputStream(fichier);
				int nbreoctet = 0;
				byte[] tab = new byte[1024]; //preparation des variables pour l'envoie du fichier
				instruction = (String) instruction+":"+taille;
				out.write(instruction+"\n"); //on renvoie l'instruction au serveur avec la taille en plus
				out.flush();
				Thread.sleep(1000);
				while((nbreoctet = reader.read(tab)) != -1) {
					client.getOutputStream().write(tab, 0, nbreoctet);
					client.getOutputStream().flush();
				}
				System.out.println("Transfert terminé");
				}
				else
					System.out.println("le fichier n'existe pas");
 
			}
		}
 
		}catch(Exception e) {e.printStackTrace();}
	}
et le serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public void run() { //tout ce qui est envoyé par le client est receptioné ici
		// TODO Auto-generated method stub
		try {
			while((instruction = in.readLine()) != null) { //attente des instructions clientes
 
				if(Pattern.matches("^copier>.+$", instruction)) { //si on a demande au client de copier
					Pattern M = Pattern.compile("\\\\"); //on s'adapte au systeme windows ou linux
					String[] nom = M.split(instruction); //on isole le nom du fichier seul
					File fichier = new File(nom[nom.length-1]);
 
					Pattern P = Pattern.compile(":");
					String chaine[] = P.split(instruction); //on recupere la taille
					long taille = Long.valueOf(chaine[chaine.length-1]).longValue(); //on met la taille du fichier dans une variable int
					long tailletotal = 0; //la totalite des donne transferes
 
					BufferedOutputStream writerfichier = new BufferedOutputStream(new FileOutputStream(fichier)); //buffer vers le fichier
					byte[] tab = new byte[1024];
					int nbreoctet; //on prepare les variables pour le transfert de fichier
 
					System.out.println("Debut du transfert");
					System.out.println(taille);
 
					while(tailletotal < taille) { //on fait la boucle pour enregistrer les donne dans le fichier
						nbreoctet = client.getInputStream().read(tab);
						writerfichier.write(tab, 0, nbreoctet);
						writerfichier.flush();
						tailletotal = tailletotal + nbreoctet;
					}
					writerfichier.flush();
					writerfichier.close();
					System.out.println("le transfert du fichier s'est deroule avec succes");
					System.out.println("fichier recu: "+nom[nom.length-1]+" de l'adresse: "+client.getInetAddress());
				}//fin de la boucle de copie
 
				else
					System.out.println("le client a tente d'envoyer une instruction inconnue");
 
			}
 
		}catch(Exception e) {e.printStackTrace(); }
		}
Je n'ai mis que les methodes run le reste etant sans importance.

Maintenant le problème, c'est qu'il m'affiche bien des 2côtés que le transfert et terminé et u'il s'est déroulé avec succès, cependant, le fichier qui a été copier est vide.
En gros si je copie:
C:\colorbox.log
j'aurai un fichier colorbox.log vide dans le dossier de l'appli.

Quelqu'un sait il d'ou vient le problème?

Merci d'avance