Python Socket服务器在后台检查连接

奥立佛

我正在使用在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秒钟的超时执行时,这不是在“搜索”,而是在等待客户端。

听起来您应该将代码分成三部分:

  1. 实际调整温度计
  2. 侦听来自iPhone客户端的连接(TCP侦听器)
  3. 等待旋转编码器的(“监听”)调整。

我将每个放在单独的线程中(使用pythonthreading模块)。创建一个FIFO队列(与queue模块一起)。让第一个(温控器调节器)线程在队列中等待(Queue.get),让其他两个线程(分别来自TCP和旋转编码器)接受指令并通过队列馈送命令(Queue.put)。

然后,您可以摆脱TCP侦听器中的超时,而将其accept无限期地阻塞同样,您的旋转编码器侦听器可以简单地等待调整。而且恒温器调节器线程可以阻止等待队列中的指令。这使所有这三个程序更加易于编程,理解和故障排除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章