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

avec Java Discussion :

Déconnexion client/serveur multithread


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Points : 85
    Points
    85
    Par défaut Déconnexion client/serveur multithread
    bonjour,

    j'ai réalisé un serveur multithred afin de gérer plusieurs clients un nombre illimité...bref ,chaque fois que un client vient se connecté le serveur peut identifier se client par son nom.le but donc et de signaler que le client x est connecté.jusqu'à maintenant tout va bien mon problème est que le client se déconnecte du à un problème de connexion ou ou bien le client ferme sa fenêtre donc la perte de la liaison entre ce client et le serveur: ma question est comment je peux savoir que y a une rupture de connexion si quelqu'un peut me proposer un exemple des idées ...ect je suis preneur. j'ai essayé plusieur truc mais je n'arrive toujours pas à détecté la déconnexion

    merci d'avance de vos réponses

    A+

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    salut,

    Alors si c'est ton client qui se déconnecte en cliquant sur la croix, tu peux implémenter une méthode qui envoie un message "je me ferme" au serveur avant de tout fermer proprement;

    Ensuite tu peux faire soit côté serveur ou côté client, un message d'échange tous les x temps pour dire qu'il est tjr là, si après x temps le message n'est plus reçu, on considéré que la connexion est fermée.

    Après quand le client se déco violemment chez moi, j'ai une exception qui se lève au niveau des input et output stream qu'il suffit de gérer try/catch par exemple.

    Le serveur peux vérifier s'il sait tjr atteindre aussi le client par une sorte de ping...

    Enfin voilà les plus courantes façons de vérifier la connections.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par John.BE Voir le message
    salut,

    Alors si c'est ton client qui se déconnecte en cliquant sur la croix, tu peux implémenter une méthode qui envoie un message "je me ferme" au serveur avant de tout fermer proprement;
    Bonjour,
    ben si le client se déconnecte en cliquant sur la crois de sa fenêtre comment la méthode va réagir pour envoyer le message 'je me ferme' ? en faite je vais supposer que le client se ferme sa fenêtre sans rien faire.(il avise pas le serveur qui va se déconnecté )

    Citation Envoyé par John.BE Voir le message
    Ensuite tu peux faire soit côté serveur ou côté client, un message d'échange tous les x temps pour dire qu'il est tjr là, si après x temps le message n'est plus reçu, on considéré que la connexion est fermée.
    cette technique m'interesse mais comment faire ça un peu de détail un petit exemple sera parfait.

    Citation Envoyé par John.BE Voir le message
    Après quand le client se déco violemment chez moi, j'ai une exception qui se lève au niveau des input et output stream qu'il suffit de gérer try/catch par exemple.
    Le serveur peux vérifier s'il sait tjr atteindre aussi le client par une sorte de ping...
    en faite j'ia pencher sur idée car quand le client se déconnecte violemment effectivement j'ai une exception au niveau des input /output stream ...bref le problème et comment gérer ça pour identifier le client déconnecté .

    merci encore pour les explications

    A+

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Salut,

    Alors pour la croix, avec Java, on peut gérer l’évènement. C'est à dire que tu peux faire ce que tu veux et y mettre une fonction de déconnexion qui ferme tous tes flux et Socket et en suite fermer l'application - Voir sur internet pour la gestion de fermeture.

    Je ne vais pas te faire un code, mais je vais te l'expliquer comment j'ai déjà fait cela.

    A chaque connexion d'un client, je lui crée une classe 'Client' où je sauvegarde tout ce que je veux comme son Socket(Si on le perd, on perd la gestion Client), son nom(id unique par exemple), ses flux d'entrée/sortie et un COMPTEUR initialiser à 3 par exemple... (Quand le client se connecte tu peux faire un échange entre le Serveur et le nouveau client pour connaitre le nom du client/serveur, les versions....) ensuite tu maintiens une Liste des Clients sur ton serveur.

    A chaque connections d'un client tu lui lances un Thread d'écoute qui contient en paramètre sa classe Client. Grâce à ce Thread tu gères tous les messages que tu reçois, dont le message "je suis là", par exemple. Et à chaque fois que tu le reçois, tu remets la variable COMPTEUR à 3.

    Et en même temps sur ton serveur, au démarrage, tu lances un thread qui lit la liste de client, qui décrémente tous les compteur de 1 des clients et qui regarde si il y a des Clients qui ont leurs compteurs à zéro à chaque passage et tu le fais dormir 15sec le thread par exemple avant de recommencer les 2 méthodes. Et quand il lis un compteur qui est à zéro, tu peux considérer que le client est déconnecté.

    Si le client n'est plus accessible, tu fermes d'abord son thread d'écoute, ses flux d'entrée/sortie et son Socket pour ensuite l'enlever de la liste de client.

    Comme moi, j'ai fait, cela laisse 45sec au client pour se manifester.

    Quand ton client se déconnecte normalement(par la volonté de l'utilisateur), tu peux faire un échange de message aussi "je ferme" et ton serveur répond "d'accord".

    Tu peux faire la même chose côté Client que quand le client envoie "Je suis là" le serveur répond "moi aussi" par exemple.

    Des deux côtés, tu peux gérer en plus les exceptions sur les flux car quand un client se déconnecte par exemple violemment, une exception se produit et de la tu peux faire ce que tu veux dans le catch. Par exemple, côté client tu réessaye de te reconnecter.


    Enfin voilà, j'espère que cela te donne des idées pour la suite...

    Pour gérer les messages crée-toi un petit Protocol pour gérer la syntaxe des messages (il existe la classe patern pour t'aider)...

    enfin voilà, poses toutes te questions sur ce que tu veux.

    Bonne chance et j’espère m'être bien exprimer.



    edit :

    Citation:
    Envoyé par John.BE
    Après quand le client se déco violemment chez moi, j'ai une exception qui se lève au niveau des input et output stream qu'il suffit de gérer try/catch par exemple.
    Le serveur peux vérifier s'il sait tjr atteindre aussi le client par une sorte de ping...
    en faite j'ia pencher sur idée car quand le client se déconnecte violemment effectivement j'ai une exception au niveau des input /output stream ...bref le problème et comment gérer ça pour identifier le client déconnecté .

    merci encore pour les explications

    Alors sache que l'exception se lève seulement sur les flux concerner, cela n'affecte pas les autres flux des autres clients.... Alors comme par exemple try/catch dans le Thread d'écoute au quelle tu as passé la classe Client, de là tu sais tout ce qu'il faut pour savoir c'est le quel.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par zpico Voir le message
    Bonjour,
    ben si le client se déconnecte en cliquant sur la crois de sa fenêtre comment la méthode va réagir pour envoyer le message 'je me ferme' ? en faite je vais supposer que le client se ferme sa fenêtre sans rien faire.(il avise pas le serveur qui va se déconnecté )



    cette technique m'interesse mais comment faire ça un peu de détail un petit exemple sera parfait.



    en faite j'ia pencher sur idée car quand le client se déconnecte violemment effectivement j'ai une exception au niveau des input /output stream ...bref le problème et comment gérer ça pour identifier le client déconnecté .

    merci encore pour les explications

    A+

    Bonjour,

    je suis vraiment content car j'ai pu résoudre le problème en faite c'est simple ben pour ceux qui ont le même problème voila comment j'ai fait :

    une fois le client connecté au serveur (multithread) il envoie autematiquemnt sur le flux de sortie son nom le serveur sauvegarde ce nom dans une variable de type string ..dés que ce client est déconnecté automatiquement une exception de type IO (fllux)se déclenche et dans le bloc catch qu'en vas localiser le non de se client par des condition if () sachant que le serveur a tout les noms des clients qui peuvent connecté avec lui. ben voila .. je pense que c'est simple et elle fonctionne parfaitement .

    si y a des remarques je suis à l'écoute ou des amélioration

    A+

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

Discussions similaires

  1. application client-serveur multithread
    Par progcyb dans le forum Threads & Processus
    Réponses: 0
    Dernier message: 14/02/2015, 09h29
  2. Client / Serveur Multithread
    Par Dadar dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 20/06/2012, 11h07
  3. Client Serveur multithread : problème
    Par cb-bk dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 04/04/2009, 16h05
  4. Serveur multithread liste des clients
    Par foxer98 dans le forum Langage
    Réponses: 3
    Dernier message: 24/05/2007, 16h38
  5. [client serveur multithread]Java
    Par Zay dans le forum Développement
    Réponses: 4
    Dernier message: 12/04/2007, 23h06

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