我试图激活一个功能,一旦我完成,将改变一些电机的控制变量。这些命令是通过wifi通过socket服务器传入的。这是代码
import SocketServer
import Tkinter as Tk
from Tkinter import *
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.DriveSend = self.request.recv(1024).strip()
self.SteeringSend = self.request.recv(1024).strip()
#print("{} wrote:".format(self.client_address[0]))
#print(self.DriveSend)
#print(self.SteeringSend)
#self.request.sendall(self.DriveSend.upper())
#self.request.sendall(self.SteeringSend.upper())
return (self.DriveSend,self.SteeringSend)
MotorControl()
def MotorControl():
MotorVar = MyTCPHandler()
MotorVar.handle()
MotorVar.DriveSend
MotorVar.SteeringSend
print(MotorVar.DriveSend)
print(MotorVar.SteeringSend)
print('test')
if __name__ == "__main__":
HOST, PORT = "192.168.2.12", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
正如您所看到的,服务器不断地运行,并注意传入的消息,我希望它每次从我的客户机程序接收到新消息时都运行MotorControl函数。我试过这个,但它没有打印任何值(在我尝试和控制任何东西之前,我用一些基本的东西来测试它的方法)所有注释掉的部分都是原始测试的代码,用于检查服务器端的东西。所有这些都很好。你知道吗
这里有几件事不对。首先,MyTCPHandler方法在调用函数之前返回。当函数中的返回被命中时,执行会立即返回,并且不会再执行该函数中的代码。你知道吗
第二,有mytchphandler方法调用MotorControl函数,但是这个函数实例化了类的一个新实例,这个实例自然没有任何信息集。相反,应该将实例传递给函数。你知道吗
所以:
尽管经过反思,我们还是不清楚为什么要在独立函数中使用它。您也许应该使MotorControl成为mytchphandler上的一个方法,这样它就可以访问
self
。你知道吗相关问题 更多 >
编程相关推荐