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

Langage Java Discussion :

FTPClient reconnecte apres refuse de connexion


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut FTPClient reconnecte apres refuse de connexion
    Bonjour tout le monde,

    J'ai une question peut-etre un peut bête :
    J'ai une application qui connecte à un serveur FTP pour prendre le contenu d'un fichier et le rend comme un Stream. Cette démarche se fait recursivement. C-a-d :
    quelques chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (100 fois){
    FTPClient ftp = new FTPClient();
    try{
    ftp.connect(host);
    }catch(Exception e){
    // Fait quelques chose
    }
    Input Stream in = ftp.retrieveFile(file);
    traite(in);
    }
    Le code est bien beaucoup plus compliqué mais la démarche principale c'est comme au-dessus.

    Le problème c'est que après une dizaine de connexions (vers loop 40eme fois), le serveur ftp rejette la connexion et envoie l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    :org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication
    Ce que je cherche c'est d'abord à savoir pourquoi il rejette la connexion?
    Mais la vrai question c'est comment gérer cette exception et demander automatiquement une nouvelle reconnexion apres le rejet de connexion. Je pense à mettre un goto dans Catch(Exception e) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for (100 fois){
    FTPClient ftp = new FTPClient();
    Label :
    try{
    ftp.connect(host);
    }catch(Exception e){
    // si la connexion est rejeté 
    goto Label;
    }
    Input Stream in = ftp.retrieveFile(file);
    traite(in);
    }
    Je ne sais pas si cela peut marcher ou pas, mais c'est sur que ce n'est la solution idéal.
    Alors comment on peut assurer une connexion au serveur FTP? Je veut dire un code qui éviter d'avancer si la connexion n'est pas fait ou s'il y une exception et qui essaie consecutivement de reconnecter au serveur.

    Je vous remercie beaucoup
    Hassan

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    pourquoi se connecter 100 fois de suite sur le même serveur?

    Une seule connexion peut permettre de transférer plus d'un fichier!

    C'est comme si tu disais qu'a chaque fois que tu mets un produit dans ton panier au magasin, tu devais aller le payer puis recommencer avec un autre article!


  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Merci pour la réponse

    Une seule connexion peut permettre de transférer plus d'un fichier!
    Oui, je suis d'accord. Mais je ne peut changer ce partie de code comme j'ai pas des droits et ca est déja mal fait....;

    Mais la question reste encore : même avec une seule fois...
    Si le serveur n'est pas disponible ou busy il envoie cette exception alors l'application
    s'arrête ou continue sans connexion et du coup sans stream....

    Mais je veut que si le serveur envoie une exception, l'application ressaie automatiquement de reprendre une connexion et ne pas avancer avant d'avoir une connexion assurée.

    Merci

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    c'est exactement le même problème que ton autre post au sujet de revenir d'une exception.

    Il faut faire une boucle de "tentatives": au bout de p.ex 5 essais, si aucune connexion n'est disponible, il faut lancer une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int attempts = 0;
    int maxAttempts = 5;
    boolean ok = false;
     
    while(!ok && attempts<maxAttempts) {
        ok = tryconnect();
        attempts++;
    }
     
    if(!ok) {
        throw new Exception("Zut, loupé...");
    }
    Tu ne peux aucunement garantir que le serveur pourra être connecté, il faut absolument que tu gère le cas où aucune connexion n'a pu être établie (qui sait, la carte réseau du pc est peut-être débranchée et donc tu ne pourras jamais te connecter)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Oui t'as raison. En fait cela montre une application d'un boucle inhabituel sur le block de Try . En fait, c'est ce que je cherchais en ouvrant mon autre poste sur handling des exceptions...


    Je pensais qu'il y a des commandes particuliers assez compliqués mais c'est vrai que j'oublie toujours qu'il faut commencer par des solutions les plus évidentes...

    Merci encore.
    J'adore ce forum.
    Viva Developpez.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Refus de connexion aléatoire
    Par isabelle b dans le forum Sécurité
    Réponses: 46
    Dernier message: 17/12/2008, 19h49
  2. Socket - Ordinateur cible refuse la connexion
    Par deejay2221 dans le forum C#
    Réponses: 5
    Dernier message: 25/04/2008, 18h51
  3. Tchat grace a winsock: probleme de reconnection apres une utilisation
    Par spygon dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/04/2007, 00h27
  4. Iptables pour refuser les connexions ssh sortantes
    Par NeilaK dans le forum Sécurité
    Réponses: 13
    Dernier message: 26/08/2006, 13h29
  5. Refus de connexion au lancement...
    Par patbeautifulday1 dans le forum XMLRAD
    Réponses: 1
    Dernier message: 17/05/2006, 12h26

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