如何在从客户端接收消息时从服务器向客户端发送连续消息(同时使用socket.listen和socket.send

时间:2018-01-13 05:46:28

标签: python python-2.7 sockets raspberry-pi3 serversocket

我的覆盆子pi是服务器,我试图从客户端(Android应用程序)接收命令从rpi发送连续消息,我真的不知道这是否可能,如何做到这是我无法达到的它不是反馈消息。我想等待android客户端连接,然后连续发送消息到客户端,同时处理来自客户端的ctrCmd消息。我希望你能帮我完成它是怎么回事谢谢。

import apptopi
from socket import *
from time import ctime
from nanpy import (ArduinoApi, SerialManager)

apptopi.setup()

connection = SerialManager()
a = ArduinoApi(connection = connection)

ctrCmd = ['Up','Down','Left','Right','Stop','Connect']

add = 0
add += 1
a = str(add) //**this is a sample that i want to send continously

HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)

tcpSerSock.listen(0)
tcpSerSock.send(str.encode(a))     <== i really don't know how to send 
                                  continuously


while True:
  print 'Waiting for connection'
  tcpCliSock,addr = tcpSerSock.accept()
  print '...connected from :', addr
  try:
        while True:
                data = ''
                data = tcpCliSock.recv(BUFSIZE)
                if not data:
                        break
                if data == ctrCmd[0]:
                        apptopi.forw()
                        print 'forward'
                if data == ctrCmd[1]:
                        apptopi.back()
                        print 'backward'
                if data == ctrCmd[2]:
                        apptopi.left()
                        print 'leftturn'
                if data == ctrCmd[3]:
                        apptopi.right()
                        print 'rightturn'
                if data == ctrCmd[4]:
                        apptopi.stp()
                        print 'stop'

except KeyboardInterrupt:
        apptopi.close()
        GPIO.cleanup()
tcpSerSock.close();

1 个答案:

答案 0 :(得分:1)

你应该使用另一个套接字。最好是为每种类型的通信使用一个插槽。如果从套接字接收数据的代码是阻塞的,您可以在单独的线程上运行它或使用龙卷风等单线程异步框架。