0

我一直在我的“控制器”中为我的树莓派机器人使用字符串变量,这些变量根据用户的箭头键输入而改变,当他们改变时通过套接字服务器发送信息。该程序在我的笔记本电脑上运行良好,打印接收到的信息的基本服务器在我的 Raspberry Pi 上运行。我现在正在使用这些信息来控制电机等。我的问题是由于某种原因我无法让它工作。

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)
              main.DriveVar.set(self.DriveSend)
              main.SteeringVar.set(self.SteeringSend)
              self.request.sendall(self.DriveSend.upper())
              self.request.sendall(self.SteeringSend.upper())
if __name__ == "__main__":
        HOST, PORT = "192.168.2.12", 9999
        server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
        server.serve_forever()
        DriveVar = StringVar()
        SteeringVar = StringVar()

下面是产生的异常/错误。

Exception happened during processing of request from ('192.168.2.10', 52447)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 638, in __init__
self.handle()
File "server.py", line 12, in handle
main.DriveVar.set(self.DriveSend)
NameError: global name 'main' is not defined

为什么这不起作用?我该如何修复它或者我应该使用什么(记住变量是在 Main 调用的类中的函数中接收的

4

1 回答 1

0

我最终设法让它工作,但没有字符串变量。

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())
          motorcontrol.self
          return(self.DriveSend,self.SteeringSend)

def motorcontrol(motor_var)
    motor = motor_var.DriveSend
    steering = motor_var.SteeringSend
if __name__ == "__main__":
    HOST, PORT = "192.168.2.12", 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()
于 2013-08-27T21:15:40.087 回答