Partage
  • Partager sur Facebook
  • Partager sur Twitter

Recv() géré une exception...

Sujet résolu
    6 juillet 2013 à 12:30:14

    Bonjour,

    Je voudrais savoir si c'était possible avec les sockets de faire en sorte du coté client, lors du blocage au recv()

    de vérifier la connexion coté serveur ... je vous explique une situation concrète , par exemple le client est en attente d'un message

    et soudainement par hasard le serveur se déconnecte brutalement, je voudrais que coté client, il gère cette exception

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      6 juillet 2013 à 13:49:36

      Bonjour,

      recv() retourne immédiatement un bytes vide quand la connexion est interrompue.

      Bonne journée !

      • Partager sur Facebook
      • Partager sur Twitter
        6 juillet 2013 à 15:54:34

        Oui mais il faut préciser un timeout :/ , or moi je veux qu'il soit en attente d'un message tous le temps ...

        et que si le serveur coupe la connexion coté client il doit réagir ...

        • Partager sur Facebook
        • Partager sur Twitter
          6 juillet 2013 à 16:09:15

          ou sinon comment tester si la connexion est ouverte ou fermé, sans utilisé recv() ou send()
          • Partager sur Facebook
          • Partager sur Twitter
            6 juillet 2013 à 18:31:17

            Tu peux utiliser select pour voir si la socket est dans un état exceptionnelle.

            Ou sinon tu utilise les threads.

            • Partager sur Facebook
            • Partager sur Twitter
              7 juillet 2013 à 13:10:23

              J'utilise deja select, mais je veux que ce soit le client qui fasse une action et non le serveur, ça ne répond pas a ma question qui est :

              Comment faire en sorte que le client sache si le serveur est toujours actif ou non ?

              Savoir si la connexion n'a pas été interrompu

              • Partager sur Facebook
              • Partager sur Twitter
                7 juillet 2013 à 13:35:50

                Quand je te parlais d'utiliser select, c'était sur le client.
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juillet 2013 à 16:19:04

                  tu peux me faire un exemple ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 juillet 2013 à 17:16:51

                    Après des tests, en fait la socket ne passe pas dans l'état « exceptionnel ».

                    Du coup, tu n'as pas d'autre choix que faire un recv() et voir si ça renvoie b''.

                    Par contre, pour éviter que ça soit bloquant, tu peux utiliser select, avec un timeout de 0.

                    S'il n'y a rien a lire sur la socket, c'est que la connexion est encore établie.

                    S'il y a des données, il faut voir si c'est une chaîne vide, sinon il faut les traiter.

                    import select
                    
                    def donnees_a_lire(socket):
                         l, _, _ = select.select([socket], [], [], 0)
                         return socket in l



                    -
                    Edité par Maxima 7 juillet 2013 à 17:21:44

                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 juillet 2013 à 19:31:34

                      Ok merci je vais voir ça sujet closed
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recv() géré une exception...

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown