Я перенес свою кодовую базу с py2 на py3, но определенная c сетевая часть не работает.
Фрагмент прослушивает широковещательное сообщение с устройства (нет, это не ответ на что-то, устройство отправляет это примерно каждые 20 секунд)
Это прекрасно работает при python 2 , но в python 3 сообщение не перехватывается (сообщения об ошибке нет, просто время ожидания до указанных 30 секунд).
Я не нашел ничего в рекомендациях по переносимости, поэтому любой совет будет приветствуется.
Thx
# -*- coding: utf-8 -*-
import re
import sys
import socket
import struct
def discover():
p = re.compile((r'AMXB<-UUID=GlobalCache_(?P<UUID>.{12}).+'
r'Model=iTach(?P<Model>.+?)>.+'
r'Revision=(?P<Revision>.+?)>.+'
r'Config-URL=http://(?P<IP>.+?)>.+'
r'PCB_PN=(?P<PN>.+?)>.+'
r'Status=(?P<Status>.+?)>'))
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(30)
s.bind(('', 9131))
group = socket.inet_aton('239.255.250.250')
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
try:
data = s.recv(1024)
match = p.match(data)
if match:
print ("iTach found!")
print ("IP:\t\t%s" % match.group('IP'))
return
except socket.timeout:
print ("Could not find an iTach on the network")
finally:
s.close()
return
discover()
exit(0)