我是编程的初学者。我目前正在尝试使用两个Raspberry Pi创建一个报警系统。我想出了如何设置套接字连接并通过tcp从客户端发送到服务器。
现在的问题是:我如何设置不同的'tcp'类型,以便我调用函数:
StartAlarm()
上的 RPI1(client)
将调用函数StartAlarm()
以在RPI2(server)
和
StopAlarm()
上的 RPI1(client)
会致电StopAlarm()
以运行onRPI2(server)
请随意纠正我的语法和拼写:)
答案 0 :(得分:0)
您可以创建一个不断等待消息指令的线程或子进程,因此如果消息是None
,则套接字中的消息为'stop the alarm'
,则执行stopAlarm()
如果邮件是'start the alarm'
,则执行startAlarm()
。既然你还没有展示你到目前为止做了什么,这就是我所能做的就是帮助你。我希望它有所帮助!
<强>更新强>:
在RPI1上:
import socket
def sendTCP(message=''):
HOST, PORT = "192.168.43.136", 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((HOST, PORT))
except socket.error:
pass
else:
sock.send(message) #the message is the order
sock.close()
在RPI2上:
import socket
import threading
def start_server(host='', port=1060):
global sock_server
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)
while True:
sock_server, sockname = s.accept()
break
def receiveTCP(sock):
message = sock.recv(32)
return message
def stopAlarm():
pass
def startAlarm():
pass
class OrderWaiter(threading.Thread):
def __init__(self, **kwargs):
super(OrderWaiter, self).__init__(**kwargs)
def run(self):
global sock_server
while True:
try:
message = receiveTCP(sock_server)
except Exception:
pass
else:
if message != '':
if message == 'stop alarm':
stopAlarm()
elif message == 'start alarm':
startAlarm()
sock_server.close()
break
if __name__ == '__main__':
sock_server = None
start_server() # pass the host and the port as parameters
OrderWaiter().start() #start the thread which will wait for the order
我希望这会有所帮助