Micropython, sockets, multicast, et recvfrom()

Page principale

Répondre à ce message
Auteur: Frédéric
Date:  
À: Guilde
Sujet: Micropython, sockets, multicast, et recvfrom()
Hello,

Je suis en train de migrer mon framework Python pour le bus domotique KNX
vers Micropython, pour pouvoir créer des devices sur micro-contrôleur.

Je teste une grosse part du code sur le port unix de Micropython, et je
tombe sur un truc bizarre.

En principe, la méthode recvfrom() d'un objet socket retourne le couple
(data, from), où from est lui-même le couple (ip, port) de la machine qui a
envoyé le message.

La data est correcte, aucun souci à ce niveau, mais le champ from, lui,
sous le port unix, a la forme :

\x02\x00\x0e\x57\xc0\xa8\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00

alors que sous le port rp2 (RPi Pico), j'ai directement un tuple :

('192.168.0.146', 3671)

(comme ça a toujours été le cas sous Python2 et Python3 sur ma machine
linux).

Une idée comment passer du tableau de bytes aux couple ip/port ? Je vois
bien les bonnes valeurs, dans la trame :

- port aux indices 2 et 3
- ip aux indices 4, 5, 6, 7

mais je ne pige pas à quoi correspondent les 2 premiers octets, ni pourquoi
c'est bourré de zéros à la fin.

Je précise que je travaille en Multicast, donc trames UDP.

Y'a peut-être un bug dans le port unix, ou pas ! J'aimerais essayer de
comprendre avant de faire un retour...

Merci de vos lumières.

-- 
    Frédéric