Raspberry Pi之间的Python套接字连接

时间:2017-10-26 21:20:18

标签: python sockets tcp

我是编程的初学者。我目前正在尝试使用两个Raspberry Pi创建一个报警系统。我想出了如何设置套接字连接并通过tcp从客户端发送到服务器。

现在的问题是:我如何设置不同的'tcp'类型,以便我调用函数:

StartAlarm()上的

RPI1(client)将调用函数StartAlarm()以在RPI2(server)

上运行 StopAlarm()上的

RPI1(client)会致电StopAlarm()以运行onRPI2(server)

请随意纠正我的语法和拼写:)

1 个答案:

答案 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

我希望这会有所帮助