Bonjour à tous
Tout d'abord je tiens à m'excuser si je n'ai pas posté au bon endroit, je suis débutant en Java, je poste donc la ou je pense que ce soit le mieux placé.
Pour revenir à nos moutons
Je dois développer un client FTP en Java avec l'api standard réservé au réseau et au thread (java.net...)
J'ai donc une classe FTPManager qui est chargé de gérer l'intéraction avec le serveur FTP. Dans cette classe j'ai une socket utilisée pour envoyer les commandes...
Quand je veux lancer un téléchargement je passe en mode passif, j'ai donc une nouvelle socket pour le transfert de données (une pour chaque téléchargement).
Mon problème c'est que je ne peux pas lancer plusieurs téléchargement en même temps, car comme le 1er téléchargement n'est pas fini je ne peux pas utiliser ma socket de commande pour en lancer un autre.
Un peu de code pour éclairer
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
48
49
50
51
52
53
54 FTPManager.downloadFile() public void downloadFile(String fileName) throws FTPException { System.out.println("Download file '/" + fileName + "' to local directory"); // On passe en mode passif Socket transferSocket = this.passiveMode(); // On cree un fichier qui sera recopie sur la machine File file = new File(fileName); // On cree les flux qui vont permettre de copier le fichier sur la machine FileOutputStream out = null; InputStream in = null; try { out = new FileOutputStream(file); in = transferSocket.getInputStream(); } catch(FileNotFoundException e) { throw new FTPException("downloadFile: " + fileName + " no such file"); } catch(IOException e) { throw new FTPException("downloadFile: can't create OutputStream"); } // On envoi la commande RETR this.sendCommand("RETR " + fileName); if(this.hashCodeResponse(this.readServerResponse()) != 150) throw new FTPException("downloadFile: bad return code RETR command - can't start file downlaod"); try { DownloadFileTransfer downloadTransfer = new DownloadFileTransfer(transferSocket, in, out); downloadTransfer.start(); } catch(FTPException e) { throw e; } catch(IOException e) { throw new FTPException("downloadFile: can't close transfer socket"); } System.out.println("Download done"); }J'espère être assez clair, donc si vous avez une solution je suis preneur
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 DownloadFileTransfer.run() public void run() { try { // On recupere le fichier depuis le serveur par paquet de BUFFER_SIZE octets. byte buffer[] = new byte[BUFFER_SIZE]; int amount; while ((amount = in.read(buffer)) > 0) out.write(buffer, 0, amount); out.close(); in.close(); mTransferSocket.close(); } catch(FTPException e) { System.out.println(""); } catch(IOException e) { System.out.println("downloadFile: can't close transfer socket"); } }
Naoss
Partager