S'abonner :  Newsletters    Magazines
Avis sur les produits Avis sur les logiciels Avis sur les jeux Actualités A propos de 01net
417 utilisateurs connectés

détection à partir du serveur de la deconnexion d'un client

babanjida le 27 aout 2008 à 11h15
Salut,
Je développe un serveur en java pour recevoir les requêtes à partir des clients qui viennent de se connecter. J'ai la boucle suivante pour traiter la session établie avec un client:
code:

byte[] buf = new byte[2048];
while (socket != null && socket.isConnected()){
socket.getInputStream().read(buf);
/* traitement de buf */
}

Le problème est que lorsque le client interrompe la connexion de façon incorrect (déconnexion sans utiliser la méthode "socket.close()"), alors la boucle while du serveur commence à tourner sans limite (puisque pour lui socket est non null et est encore connectée), et bien sûr, buf sera vide à chaque fois.
J'ai pas trouver aucune méthode capable de détecter l'absence non signalé du client alors j'ai ajouté une condition de vérification de la taille de "buf" qui permet de sortir de la boucle while si sa taille est 0, mais je trouve que cette solution n'est pas propre, et je voudrais savoir si quelqu'un d'entre vous est capable de m'aider à ce sujet.
QuiPhenix le 27 aout 2008 à 12h12
Bonjour,

Il me semble que la methode isBound() de la socket vous permettrais de savoir si cette socket est encore liée a une autre.
-------
[:QuiPhenix:3]
babanjida le 27 aout 2008 à 12h45
Merci de ta réponse.
J'ai déjà essayé cette méthode ainsi que la méthode isInputShutdown() mais leurs valeurs sont toujours "true" pour isBound() et "false" pour "isInputShutdown()" même quand le client disparaît.
QuiPhenix le 27 aout 2008 à 13h17
Ok, difficile effectivement :/

Je crois qu'il n'y a pas vraiment de méthode :/
Si votre client envoie des données en continu, vous pouvez appliquer un timeout a votre socket qui se fermera d'elle même si aucun message n'est reçu dans le délai indiqué. Vous pouvez même modifier votre client pour qu'il envoi des petits messages pour garder la connexion active.
-------
[:QuiPhenix:3]
babanjida le 27 aout 2008 à 13h29
J'ai fait une condition sur la taille du message reçu : si la taille est positive alors on reste à l'écoute des conneries du client, sinon (taille = -1) il faut conclure que le client n'est plus existant!!! ça a marché, mais je cherche une façon plus propre!! De toute façon je ne sais pas pourquoi le statu de Socket reste "connecté" même si le client ne répond pas! Est ce que c'est une mauvaise classe développée par SUN? (je rigole bien sûre)
QuiPhenix le 27 aout 2008 à 14h02
Il faut croire que oui, c'est un manque dans l'API Java :/
-------
[:QuiPhenix:3]


PRODUITS

TÉLÉCHARGER - LOGICIELS

JEUX VIDÉOS

LOISIRS

01NET PRO

AVIS ET COMMENTAIRES

A PROPOS DE 01NET

publicité
> ChanceRoom
Découvrez la nouvelle Poker Room montante.

Service 01net
Newsletters 01net
abonnez vous gratuitement !
  
01Informatique
01 INFORMATIQUE
L'hebdo de référence des décideurs informatiques.
Micro Hebdo
MICRO HEBDO
L'hebdo qui vous simplifie la micro
et Internet.
L'Ordinateur Individuel
L'ORDINATEUR INDIVIDUEL
Le mensuel informatique qui vous informe et vous conseille.
Nous contacter  |  Charte de confiance  |  Voir notice légale

01net.  -  01men  -  RMC  -  BFM Radio  -  BFM TV  -  TousLesPodcasts  -  01informatique.fr  -  Association RMC-BFM
Tous droits réservés © 1999 - 2009 Internext - 01net.