Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : mai 2008
    Messages : 6
    Points : 3
    Points
    3

    Par défaut Problème socket ethernet (encodage?)

    Bonjour à toutes et à tous.

    Je suis relativement nouveau dans la programmation en python et je suis face à un problème (qui au fond ne doit pas être si compliqué) auquel je ne trouve pas de réponses sur le net.

    J'ai deux programmes très simples en python pour dialoguer sur le port ethernet. Voici les deux programmes ci-dessous (je suis sous Python 3.2, Windows XP 32 bits).

    Envoi de données:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    from socket import *
     
    # Set the socket parameters
    host = "localhost"
    port = 21568
    buf = 1024
    addr = (host,port)
    UDPSock = socket(AF_INET,SOCK_DGRAM)
     
    data = 'TEST'
     
    UDPSock.send(bytes( data, 'UTF-8'))

    Réception des données:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    from socket import *
     
    host = "localhost"
    port = 21568
    buf = 1024
    addr = (host,port)
    UDPSock = socket(AF_INET,SOCK_DGRAM)
    UDPSock.bind(addr)
     
    while 1:
        data,addr = UDPSock.recvfrom(buf)
        if not data:
            print ("Client has exited!")
            break
        else:
            print ("Received message : ", str(data,'UTF-8'))
    UDPSock.close()
    Le code ci-dessus fonctionne très bien. Le problème vient plutôt de l'étape n°2. En effet, le programme ci-dessus n'a servi que de test, je souhaite maintenant recevoir des messages d'un matériel présent sur le réseau.

    Je reçois bien des données de ce matériel mais ces dernières ne sont pas au bon format!

    Données reçues avec Wireshark (hexa):
    e7 9a 10 69 00 00 1e fa ff 0c 81 fe [...]

    Données reçues dans mon code:
    e7 9a $S 01 00 14 fa ff 87 80 fe { [...]

    Le problème vient, je pense, de l'encodage des données mais quels que soient les tests que j'ai pu effectuer, je ne retombe jamais sur la bonne trame!

    A quelle étape est-ce que je fais quelque chose de mal? Cette histoire d'encodage et décodage (encode/decode, binascii, str, etc...) m'a complètement perdu


    Merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 384
    Points : 7 538
    Points
    7 538

    Par défaut

    Ca affiche quoi lorsque vous affichez les bytes reçus en hexa.
    On devrait avoir la même chose que ce qui passe sous wireshark, postez le nouveau code.
    - W
    Architectures Post-Modernes

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : mai 2008
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Merci pour votre aide

    Mon problème est justement de savoir comment avoir les données en hexa.
    Les données reçues (affichées dans le premier message) ressemblent à de l'hexa mais avec des caractères qui n'ont rien à voir avec de l'hexa


    Au niveau de la réception, j'ai essayé de changer la ligne :
    Code :
    print ("Received message : ", str(data,'UTF-8'))
    par un simple:
    Malheureusement le résultat est toujours différent de Wireshark. (Désolé je n'ai pas le matériel sous la main pour le moment, il m'est donc impossible de poster le résultat obtenu).

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    mars 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2007
    Messages : 895
    Points : 1 196
    Points
    1 196

    Par défaut

    Euh... Ton "matériel sur le réseau" envoie des données encodées en hexa ? Ce serait pas plutôt des chaînes binaires ?
    Essaie ceci:
    Code :
    print("Received message :", " ".join(hex(c) for c in data))

  5. #5
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : mai 2008
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Merci beaucoup dividee c'était bien cela. (c'était tellement simple )

    Désolé pour le temps de réponse, je n'ai pu tester le code avec le matériel en question que la semaine dernière.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •