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:
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 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();} }
Je n'ai mis que les methodes run le reste etant sans importance.
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(); } }
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
Partager