1
我想發送一些數據到傳感器,如果python腳本沒有收到數據我希望接收函數超時並重新發送數據。如果沒有數據接收,Python UDP套接字重新發送數據
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()
在它被卡在接收功能,如果它沒有接收到任何數據的時刻:但是我希望它如後超時
data, addr = sock.recvfrom(1024)
2秒鐘並重新運行subscribe()函數。
我試過使用一段時間的真正的語句與超時和嘗試/例外,但是我得到一個當前正在使用的端口,即使關閉端口。也感覺這種方式很混亂。
任何想法,將不勝感激。