Bonjour,
Je souhaite transférer un fichier .avi par socket d'un PC à un autre (client/serveur)
Or je veux que mon programme s'exécute sans arrêt et à chaque fois qu'il trouve un fichier .avi dans le client (Pc1), il l'envoie au PC2 (serveur).
Mon code est composé de trois classes : (voir le code)
-Une classe rep_client qui fait appel à la classe Client.
-Deux classes (Client et serveur)
Mon code fonctionne bien, le serveur est sur écoute pas de problème d'exécution sauf que dans le cas où j'ajoute un nouveau fichier au dossier client pour qu'il puisse être envoyé, un message d'erreur s'affiche me signalant queEn effet le problème c'est qu'il faut attendre que l'ensemble du fichier soit ajouté au dossier du client : j'explique si la taille du fichier est de 200 Mo (il faut attendre le temps de copie du fichier afin de l'envoyer par la suite au serveur).Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus
Que dois je-faire ?
Merci de votre aide
Rep_Client :
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
34
35
36
37
38
39
40 package File; import java.io.* ; public class rep_client { public static void liste(String a){ while (true){ // boucle infinie File repertoire = new File(a); String [] listefichiers; listefichiers=repertoire.list(); System.out.print("j'ai trouvé un fichier fichier :p"); int i; for(i=0;i<listefichiers.length;i++){ if(listefichiers[i].endsWith(".avi")==true){ System.out.println(a+"\\"+listefichiers[i]); String target1=a+"\\"+listefichiers[i]; Client.envoie(target1); // supression du fichier après envoie //File supfichier= new File(a+"\\"+listefichiers[i]); //supfichier.delete() ; //System.out.print("test1"); } } } } public static void main(String[] args) { // le chemin ou se situe les fichiers côté client //System.out.print("test2"); liste("D:\\mon_dossier_ou_se_situe_les_fichiers"); } }
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 package File; import java.io.*; import java.net.*; public class Client { public static void envoie (String chemin) { try { Socket s=new Socket("localhost",7777); BufferedOutputStream out = new BufferedOutputStream( s.getOutputStream() ); FileInputStream filein = new FileInputStream(chemin); byte[] buffer = new byte[8192]; int bytesRead =0; while ((bytesRead = filein.read(buffer)) > 0) { out.write(buffer, 0, bytesRead); } out.flush(); out.close(); filein.close(); File supfichier= new File(chemin); supfichier.delete() ; s.close(); }catch (IOException e){System.out.println("IO error"+e);}; } }
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
42
43
44
45
46
47 package File; import java.io.*; import java.net.*; public class server2 { public static void me(Socket n,String ch) { try { InputStream in = n.getInputStream(); FileOutputStream out = new FileOutputStream("D:\\test\\test2\\"+ch+".avi"); byte[] buffer = new byte[8192]; int bytesRead =0; while ((bytesRead = in.read(buffer)) > 0) { out.write(buffer, 0, bytesRead); } out.flush(); out.close(); }catch (IOException e){System.out.println("IO error"+e);}; } public static void main(String args[]) {int nreq=1; try { ServerSocket sock = new ServerSocket(7777); int i=0 ; for(;;) { Socket newsock=sock.accept(); String sh=Integer.toString(i); System.out.println(sh); me(newsock,sh); i++; } }catch (IOException e){System.out.println("IO error"+e);}; } }
Partager