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 :

Fermeture connexion TCP et exception


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Fermeture connexion TCP et exception
    J'ai une application qui utilise une connexion TCP.
    Je souhaite que : lorsqu'il y a une erreur au niveau de la connexion, celle ci soit fermée.

    Mais je me retrouve avec un code assez aberrant, avec des try catch imbriqués :

    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
     
        public void run()
        {
            try
            {
                while (true) //boucle de réception
                {
                    Action action = this.connection.receiveAction(); //réception
     
                    if (action != null)
                    {
                        this.action(action); //traitement de l'objet reçu
                    }
                }
            }
            catch (IOException e) //si jamais ça plante
            {
                e.printStackTrace();
                try
                {
                    this.connection.close(); //on ferme la connexion
                }
                catch (IOException e1)
                {
                    e1.printStackTrace(); //plantage de la fermeture de connexion ???
                }
            }
        }
    (mon objet "connection" encapsule une connexion TCP)

    Connaissez vous un moyen élégant de traiter ce genre de cas ?

    Merci !

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    C'est moins un problème d'élégance que de nécessité.
    Quoi qu'il en soit, c'est mieux de faire comme ça :
    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
    public void run()
    {
            try
            {
                while (true) //boucle de réception
                {
                    Action action = this.connection.receiveAction(); //réception
     
                    if (action != null)
                    {
                        this.action(action); //traitement de l'objet reçu
                    }
                }
            }
            catch (IOException e) //si jamais ça plante
            {
            	e.printStackTrace();
            }
            finally
            {
                //Pour être sûr de toujours fermer la connection.
                try
                {
                    this.connection.close(); //on ferme la connexion
                }
                catch (IOException e1)
                {
                    e1.printStackTrace(); //plantage de la fermeture de connexion ???
                }
           }
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    ok merci !
    je vais revoir mon code en fonction de tes conseils

    mais ça me tracasse toujours ce "try catch" dans un "catch"

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    C'est effectivement un peu lourd mais dans un cas comme ça si on veut gérer les choses correctement il est difficile de faire autrement.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    On peut utiliser un try/finally dans un try/catch, ce qui permet d'avoir une gestion unique des exceptions :

    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
    	public void run()
    	{
    	        try
    	        {
    	        	// INITIALISATION
    	        	try {
    		            while (true) //boucle de réception
    		            {
    		                Action action = this.connection.receiveAction(); //réception
     
    		                if (action != null)
    		                {
    		                    this.action(action); //traitement de l'objet reçu
    		                }
    		            }
    	        	} finally {
    	        		this.connection.close();
    	        	}
    	        }
    	        catch (IOException e) //si jamais ça plante
    	        {
    	        	e.printStackTrace();
    	        }
    	}
    De plus en créant/ouvrant la connexion à l'emplacement indiqué par le commentaire "INITIALISATION", tu peux limiter son scope et donc éviter toute consommation abusive de la mémoire...


    a++

  6. #6
    Invité
    Invité(e)
    Par défaut
    ça me plait un peu plus comme solution
    merci !

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

Discussions similaires

  1. HTTP et fermeture de la connexion TCP (keep-alive, close ?)
    Par Galdon dans le forum Développement
    Réponses: 0
    Dernier message: 02/12/2011, 16h35
  2. Connexion TCP/IP sans carte réseau
    Par Grand2000 dans le forum Administration
    Réponses: 16
    Dernier message: 13/01/2006, 19h21
  3. Petit souci sur la libération d'une connexion tcp
    Par alexandre75 dans le forum Développement
    Réponses: 1
    Dernier message: 08/11/2005, 20h43
  4. [Librairies] PHP et MSDE pb lors de l'activation de connexion TCP IP
    Par SPA dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 14/10/2005, 22h46
  5. Réponses: 3
    Dernier message: 28/09/2004, 17h39

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