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

MFC Discussion :

Détecter déconnexion client _ socket


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut Détecter déconnexion client _ socket
    Salut,
    j ai voulu tester la fonction fournie dans la FAQ :
    http://c.developpez.com/faq/vc/?page...wDetectNetwork
    elle devrait permettre de détecter la présence du réseau.
    Je l'utilise dans une application client serveur pour vérifier la présence du réseau.
    Donc je pensais qu'en retirant le câble réseau cette fonction me retournerait False, ce qui n'est pas le cas chez moi !? une explication ?

    Du coup j'essaye de faire autrement.

    Quel fonction utiliser pour détecter cette rupture ? par exemple on voit bien l'icone de la connexion réseau qui affiche cette rupture dans la barre des tâches, où trouver cette info ?

    On m a parlé de mettre un thread qui vérifie que la connexion est OK,
    mais qui peut me dire ce qu'il faut tester ?
    ============================================
    Dans mon appli client serveur il y a un échange de message toutes les x secondes. J ai un time out de 10 minutes si rien n'a été échangé, dans ce cas je réinit le socket.

    Ma fonction "Send" sur le serveur envoie des messages au client périodiquement. Si je retire le câble réseau, et que j envoie un message au client ma fonction fait comme si le message avait bien été envoyé. Le protocole définit ici ne prend pas en compte l'acquittement du client ( c est imposé dans le cahier des charges). C'est pourquoi il faut que je trouve comment détecter immédiatement cette déconnexion.

    Avec la commande netstat, la connexion reste Established pendant un certain temps malgré cette déconnexion. Pourquoi ?
    ===============================================
    Un autre problème:
    Si on kill le client (celui-ci n'envoie pas donc pas la fermeture de la socket) il faudrait que le serveur détecte immédiatement cette "rupture" comment faire ?

    Soft: Visual C++ 7
    WinXP

    Pour ceux qui arrive ici: merci d avoir déja lu tout ca.
    Et merci à ceux qui pourront m éclaircir sur ces queslques points.

    Yuli qui continue ses investigations

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    Tu as changé le timeout sur le keepalive ?
    Sinon voir aussi :
    http://c.developpez.com/faq/vc/?page...wDetectNetwork

  3. #3
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Ma fonction "Send" sur le serveur envoie des messages au client périodiquement. Si je retire le câble réseau, et que j envoie un message au client ma fonction fait comme si le message avait bien été envoyé. Le protocole définit ici ne prend pas en compte l'acquittement du client ( c est imposé dans le cahier des charges). C'est pourquoi il faut que je trouve comment détecter immédiatement cette déconnexion.
    Tu ne peux pas compter sur le protocole qui semble être UDP dans ton cas !

    Il faut que tu places une surcouche qui vérifie certain point !
    Si le message a été reçu par le client, le client doit confirmer que ce message a bien été reçu !

    Si le message envoyé n'a pas été reçu alors le client de départ renvoie le message tant qu'il n'a pas reçu message de confirmation.

    De même le client qui reçoit le message doit vérifier si le message reçu n'est pas un doublon.

    Donc je pense qu'il faut que tu réfléchisses + au niveau de l'architecture globale que sur le protocole utilisé pour ton problème.
    Car aucun protocole de base ne gère cela

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Re et merci pour vos réponses.

    Pour ce qui concerne le time out du keepalive:
    en fait j'ai bien créé les clées dans la base du registre mais:
    le problème principale que j'ai c'est que j'utilise une librairie pour toute la communication socket. J'ai une partie de ces sources (que je ne devrais pas posséder d'ailleurs ...) mais je n'ai pas à y faire de modif.
    Pour le keepalive il faut activer cette "option" via:
    setsockopt(va_sock_Ecoute, SOL_SOCKET, SO_REUSEADDR.......);
    mais dans leur source ca n est pas fait.

    Seul ceci est activé:
    SO_SNDBUF
    SO_RCVBUF
    SO_REUSEADDR
    et pas le SO_KEEPALIVE
    Donc à ce niveau je ne peux rien faire. Sauf qu'une de leur fonction me retourne le descripteur du socket.... faut que j aille tester ....

    Ti-R:
    Pour le proto c est bien en mode connecté (donc TCP).
    Pour tout ce qui est gestion des messages c'est fait dans une librairie (partie que je ne peux modifier), elle a été réalisée par une autre société, mais une de leur fonction qui doit détecter la perte de la communication ne marche pas (pas assez vite en tout cas).

    Savez vous où je peux trouver cette info: quand windows détecte la perte du cable reseau, l'icone de la barre des taches disparait ?

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Cela va être dur dur de trouver une solution si tu n'as accès qu'au haut niveau de la bibliothèque

    Surtout sur le fait que:
    Si je retire le câble réseau, et que j envoie un message au client ma fonction fait comme si le message avait bien été envoyé
    Alors que TCP assure que les données ont été transmises correctement :-/

    Ou alors mappé un control comme pour UDP et indiqué quel paquets ont bien été transmit !
    Ce n’est pas une super solution, cela va super bien fonctionner mais être 1 fois plus lent que d'origine.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Re,

    Bon je suis rassuré sur plusieurs points,
    je viens d'avoir une réponse de la société qui a fait la librairie. Ce problème est connu.
    Il me propose d aller modifier :

    Ouvrir l'éditeur de registre (Démarrer, Exécuter, regedit)
    Sous le chemin : HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/
    Sous le clef : DisableDHCPMediaSense
    Valeur : 0
    Unité : Hexadécimal

    Je vais tester ca cet apres midi.

    Pour ce qui est de leur librairie c'est vrai qu il y a un gros soucis concernant les acquittements. Je sais pas où est passé TCP dans tout ca...bref je dois faire avec.
    J'ai leur source pour tout ce qui gère leur comm. bas niveau. Mais elle date d'il y a 3 ans. Et entre temps j'ai eu une nouvelle version de leur librairie, mais sans les sources cette fois, dommage.

    @+ et merci

Discussions similaires

  1. [WD12] Détecter déconnexion serveur socket
    Par juju1988 dans le forum Windev Mobile
    Réponses: 6
    Dernier message: 27/05/2011, 10h31
  2. [PHP 5.3] Serveur socket, événement déconnexion clients
    Par CraPu!e dans le forum Langage
    Réponses: 1
    Dernier message: 10/01/2011, 13h57
  3. Question client-serveur socket
    Par Lex99 dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2006, 09h01
  4. TServerSocket: Détection déconnexion client
    Par Neo41 dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/09/2004, 19h46
  5. Problème de timeout et de déconnexion cliente
    Par Aurelien92 dans le forum CORBA
    Réponses: 18
    Dernier message: 24/08/2004, 14h32

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