我正在使用在iPhone上运行的应用程序来开发Wi-Fi温控器。它使用套接字使用内置的套接字库与python程序进行通信。我遇到的问题是,我希望能够在未连接手机时更改温度,但是服务器将搜索1秒钟,然后超时(iPhone连接的最短时间),这不会请允许我用旋转编码器平稳地调节温度。有没有办法在后台进行侦听?
import sys
import socket
import os
import time
temp = 15
while True:
try:
HOST = '192.168.1.22'
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
s.settimeout(1)
conn, addr = s.accept()
#conn.send(str(9).encode())
conn.send(str(temp).encode())
while True:
data = conn.recv(1024)
if not data: break
print(data)
print(data.decode())
data2 = data.decode()
if int(data2) in range(5, 31):
print(data2)
print("Setting the temperature to " + str(data2) + "°")
conn.send(("Setting the temperature to " + str(data2)).encode())
temp = data2
else:
print("Not in range")
conn.send("Not in range!\n".encode())
except:
print("No Connection!")
谢谢!
您的术语有点令人困惑,但我想我明白您正在尝试做的事情。当您的程序accept
以1秒钟的超时执行时,这不是在“搜索”,而是在等待客户端。
听起来您应该将代码分成三部分:
我将每个放在单独的线程中(使用pythonthreading
模块)。创建一个FIFO队列(与queue
模块一起)。让第一个(温控器调节器)线程在队列中等待(Queue.get
),让其他两个线程(分别来自TCP和旋转编码器)接受指令并通过队列馈送命令(Queue.put
)。
然后,您可以摆脱TCP侦听器中的超时,而将其accept
无限期地阻塞。同样,您的旋转编码器侦听器可以简单地等待调整。而且恒温器调节器线程可以阻止等待队列中的指令。这使所有这三个程序更加易于编程,理解和故障排除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句