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 :

[Socket]Lever des exceptions


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Points : 33
    Points
    33
    Par défaut [Socket]Lever des exceptions
    Bonjour

    J'ai une classe SocketReader qui me permet de gérer en lecture les socket de mon appli. Seulement quand il y a une coupure réseau avec un client qui envoie des données (mais n'en recoit pas) il n'y a pas d'exception, que je ne peut detecter puisque je n'écris pas sur ce socket.

    Voila le code d'ini de ma socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {
                reader = new BufferedReader(
                        new InputStreamReader(
                        socket.getInputStream(), "UTF-8"));
            } catch (IOException e){
                DLog.sysout(this, 1, "*** Error Constructing Socket Reader on "+connectionInfo);
                DLog.sysout(this, 1, "*** Error message :"+e.getMessage());
                closeReader();
            }
    Comment faire pour avoir une exception quand la liaison entre le client et ma socket d'écoute tombe? J'imagine qu'en TCP il doit y avoir quelque chose qui "casse". J'avais deja eu ce soucis avec une socket ne faisant que de l'emission et il avais suffit de changer le type de OutputStreamWriter(ou quelque chose d'approchant) pour lever une exception.
    Sylario

  2. #2
    Membre habitué Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 148
    Points
    148
    Par défaut
    je ne suis pas caler en Java, mais dans les autres langages avec lesquels j'ai travailler il etait toujours mieux de lever sois-meme ses exceptions plutot que de les attendres. Je veux dire par la que si tu es capable de detecter cet evenement, avec une boucle je presume, et ben tu n'aurais qu'a faire un petit throw new IOException("Line death");

    Bonbonbon voyons voir la doc [http://java.sun.com/j2se/1.5.0/docs/...t/Socket.html]

    Hm... p-e en verifiant a l'aide de isConnected() [http://java.sun.com/j2se/1.5.0/docs/...isConnected()] ou isClosed() [http://java.sun.com/j2se/1.5.0/docs/...ml#isClosed()].

    Sinon je dirais isInputShutdown pour savoir si on recoit des donnees... enfin bref je peux vraiment pas t'aider sauf en te disant de lire la doc .

    Sinon, pour ceux qui tombe sur ce post en se disant : tiens tiens je vais faire des sockets, allez jeter un ptit coups d'oeil sur ce http://madchat.org/coding/java/java_sockets.html c'est en anglais mais bien ecrit

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Oui mais comme je suis bloqué sur un readline je ne peut pas faire de test, il faudrais que ce soit le flux que je lit qui lance une exception.
    Sylario

  4. #4
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    tu peux définir un temps d'attente maximum avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private Socket aClientSocket=new Socket(anIPAddressString,aPortInt);;
    this.aClientSocket.setSoTimeout(361000);
    comme ça, si tu ne reçois rien pendant un temps... c'est que ta connexion est perdue
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    merci je vais tester ça
    Sylario

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Finalement j'ai utilisé mon systéme de "queue de la socket qui a un wait timeout" et donc renvoie nul, mais si j'avais fait le timeout ca devrais fonctionner aussi.

    Remarque importante si on close un buffered reader avant de fermer la socket ca déconne, il faut fermer la socket avant, dans mon cas en tout cas.
    Sylario

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

Discussions similaires

  1. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    Réponses: 6
    Dernier message: 19/08/2004, 15h06
  2. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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