Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 17h23   #1
Radical edward
Invité de passage
 
Homme
Inscription : 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 : 4
Points : 4
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
Radical edward est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 18h01   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 09h13   #3
Radical edward
Invité de passage
 
Homme
Inscription : 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 : 4
Points : 4
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).
Radical edward est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 20h23   #4
dividee
Membre Expert
 
Homme
Inscription : mars 2007
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 851
Points : 1 182
Points : 1 182
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))
dividee est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/02/2013, 09h44   #5
Radical edward
Invité de passage
 
Homme
Inscription : 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 : 4
Points : 4
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.
Radical edward est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h49.


 
 
 
 
Partenaires

Hébergement Web