Téléchargement simultané client FTP
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:
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");
} |
Code:
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");
}
} |
J'espère être assez clair, donc si vous avez une solution je suis preneur :)
Naoss