IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

2 connexions ftp sur 2 cartes réseaux : téléchargement en paralallèle


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Par défaut 2 connexions ftp sur 2 cartes réseaux : téléchargement en paralallèle
    Salut,

    Je suis en train de faire une application permettant de télécharger, en ftp, deux fichiers en parallèle à l'aide de deux cartes réseaux connectées à deux routeurs différents (deux lignes adsl).

    J'utilise pour ça l'API Jarkarta Commons Net mais j'ai un problème lors de l'établissement des connexions ftp :
    - Je crée deux instances de FtpClient (classe de l'API) en leur passant à chacune l'InetAddress de leur carte réseau respective lors du connect et de la création du socket. Je leur donne également un port local différent.
    - Ensuite je crée deux Thread dans lesquelles je lance le téléchargement des fichiers pour chaque FtpClient.

    Mais voilà... j'ai comme l'impression que la deuxième instanciation de FtpClient "écrase" la première car il m'est impossible de télécharger quoi que ce soit avec la première instance, ni même envoyer une simple commande FTP.
    Alors que si je n'instancie qu'un seul FtpClient, tout fonctionne correctement, avec l'une ou l'autre carte réseau.


    Je sais que c'est assez flou, mais quelqu'un aurait-il déjà rencontré un problème similaire ?
    Une idée ? J'ai oublié quelque chose ? Des précisions à apporter ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il n'y a pas de raison pour que ça ne fonctionne pas.
    Donne ton code.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Par défaut
    Merci pour cette réponse rapide.


    D'abord ma classe Sftp
    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
    public class Sftp extends Thread {
     
        private String hostname;
        private String username;
        private String password;
        static private int localport = 2295;
        FTPClient ftp;
     
        private DSLline line;
     
        String fileToDownload;
     
    ...
     
    }

    Puis la fonction que j'utilise pour instancier un FtpClient. Cette fonction provient de ma classe "Sftp" que j'instancie donc deux fois. Cette classe hérite de Thread (voir le code de sa méthode run() en dessous).

    line.getInetAddress() me renvoie l'InetAddress de la carte réseau qui va être utilisée pour la connection.
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    public void connect() {
     
            int base = 0;
            boolean storeFile = false, binaryTransfer = false, error = false;
     
     
            ftp = new FTPClient();
            ftp.addProtocolCommandListener(new PrintCommandListener(
                                               new PrintWriter(System.out)));
            try
            {
                int reply;
                ftp.connect(hostname, 21, line.getInetAddress(), localport);
                System.out.println("Connected to " + hostname + ".");
     
                // After connection attempt, you should check the reply code to verify
                // success.
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply))
                {
                    ftp.disconnect();
                    System.err.println("FTP server refused connection.");
                    System.exit(1);
                }
            }
            catch (IOException e)
            {
                if (ftp.isConnected())
                {
                    try
                    {
                        ftp.disconnect();
                    }
                    catch (IOException f)
                    {
                        // do nothing
                    }
                }
                System.err.println("Could not connect to server.");
                e.printStackTrace();
                System.exit(1);
            }
     
    //------------IDENTIFICATION-------------------
     
            try
            {
                if (!ftp.login(username, password))
                {
                    ftp.logout();
                    error = true;
                }
                System.out.println("Remote system is " + ftp.getSystemName());
     
                if (binaryTransfer)
                    ftp.setFileType(FTP.BINARY_FILE_TYPE);
     
                // Use passive mode as default because most of us are
                // behind firewalls these days.
                ftp.enterLocalPassiveMode();
     
            }
            catch (FTPConnectionClosedException e)
            {
                error = true;
                System.err.println("Server closed connection.");
                e.printStackTrace();
            }
            catch (IOException e)
            {
                error = true;
                e.printStackTrace();
            }
     
        }
    Voici la méthode run() du Thread lancé pour chaque téléchargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
        public void run() {
            try {
                OutputStream output = new FileOutputStream(fileToDownload);
                System.out.println(ftp.printWorkingDirectory());
                ftp.changeWorkingDirectory("test");
                ftp.retrieveFile(fileToDownload, output);
                output.close();
                ftp.logout();
            } catch (IOException ex) {
                Logger.getLogger(Sftp.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    Il n'y a donc rien de spécial, c'est presque du copier-coller de l'example de l'API.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Par défaut
    Pour vous mon code devrait fonctionner ? Je n'ai rien oublié de faire ?
    Le problème se situerait ailleurs ?

    J'ai plus trop d'idées...

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Le code qui tu as donné est un peu en bazar. Colle les sources des classes en entier, et fait les commentaires dans le code !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. debian même adresse MAC sur deux cartes réseaux
    Par speedev dans le forum Réseau
    Réponses: 0
    Dernier message: 03/06/2011, 10h37
  2. OpenBSD failover sur 2 cartes réseaux
    Par phiinks dans le forum BSD
    Réponses: 1
    Dernier message: 21/04/2011, 21h55
  3. Installation IIS et APACHE sur deux cartes réseaux
    Par bannik dans le forum Serveurs (Apache, IIS,...)
    Réponses: 10
    Dernier message: 18/04/2008, 09h16
  4. serveur ftp sur la carte ipjv-es
    Par amelG dans le forum Qt
    Réponses: 1
    Dernier message: 21/11/2007, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo