Partage
  • Partager sur Facebook
  • Partager sur Twitter

Socket python

Information et compréhension

Sujet résolu
    6 avril 2024 à 16:14:53

    Bonjour,

    Je me permets de vous déranger je suis entrain de travailler sur un code type serveur/client. Les données que j'envoie a l'un comme a l'autre son dumps avec pickle.

    Lors que je lance le code serveur sur mon pc windows tous ce passe correctement. Lors que j'exécute le code serveur sur mon raspberry avec Ubuntu serveur comme os. Je tombe en pickle tronqué et suis obligé de beaucoup augmenter la taille de réponse des sockets ce qui rend mon code hyper long.

    Bien sûr le code exécuté et le même d'un côté comme de l'autre les objets envoyés sont les même également il n'y a 0 différence de code.

    Ma question est la suivante est-ce que les informations envoyées par socket sont différentes d'une machine a l'autre ou d'un os a l'autre ?

    Merci d'avance pour votre temps et vos réponses :)

    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2024 à 16:49:30

      Un pickle tronqué, c'est en général, parti dans l'idée que lorsqu'on fait send d'une séquence de bytes d'un côté, on devait recevoir la même séquence de bytes l'autre côté.... on constate que ce n'est pas le cas! En effet, TCP/IP ne garantit que la récupération des bytes dans l'ordre où il ont été expédié mais si on expédie 100 bytes on peut très bien récupérer 40 bytes puis 60 bytes...

      Sauf à avoir codé une notion de "message" qui permet de détecter le début de.... et d'en attendre la fin avant d'en exploiter le contenu.

      Les sockets n'ont rien  à voir avec Python: on a le même problème avec tous les langages qui utilisent cette fonctionnalité système/réseau.

      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2024 à 17:23:36

        Bonjour,

        Si je comprends bien ta réponse avant de pouvoir utilisé pickle pour récupéré mes données il faut que je m'arrange pour boucler jusqu'à être sur de bien avoir tous les bytes de la réponse ?

        Je suppose que socket ne le gère pas d'office et qu'il faut s'arranger pour trouver la fin de la réponses du serveur ? :)

        • Partager sur Facebook
        • Partager sur Twitter
          6 avril 2024 à 18:17:21

          C'est bien ce que mps explique.

          Il faut soit un code de fin de bloc où un compte du nombre de bytes envoyé au début du premier message.

          Tu dois avoir ton propre protocole au dessus de TCP.

          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            6 avril 2024 à 18:30:45

            Je vois merci beaucoup pour vos réponses :)
            • Partager sur Facebook
            • Partager sur Twitter

            Socket python

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown