Ich möchte einige Daten an einen Sensor senden, und wenn das Python-Skript die Daten nicht empfängt, möchte ich die Empfangsfunktion Timeout und die Daten erneut senden.Python UDP-Socket senden Daten erneut, wenn keine Daten empfangen wurden
def subscribe():
UDP_IP = "192.168.1.166"
UDP_PORT = 10000
MESSAGE = '6864001e636caccf2393730420202020202004739323cfac202020202020'.decode('hex')
print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
recieve_data = recieve()
if recieve_data == subscribe_recieve_on or recieve_data == subscribe_recieve_off:
logging.info('Subscribition to light successful')
else:
logging.info('Subscribition to light unsuccessful')
def recieve():
UDP_IP = "192.168.1.118"
UDP_PORT = 10000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
data, addr = sock.recvfrom(1024)
return data.encode('hex')
subscribe()
Im Moment ist es in der Funktion erhalten stecken bleibt, wenn es keine Daten erhalten:
data, addr = sock.recvfrom(1024)
Jedoch habe ich es nach dem Beispiel Timeout wollen 2 Sekunden und führen Sie die Funktion subscribe() erneut aus.
Ich habe versucht, eine while true-Anweisung mit einem Timeout und versuchen/Ausnahme, aber ich bekomme einen Port derzeit in Betrieb, auch wenn Sie den Port schließen. Fühle mich auch so unordentlich.
Irgendwelche Ideen würden geschätzt.