在Python中将参数传递给UDP处理程序

用户

我第一次在Python中使用套接字,但我遇到了一个问题。在

我有一个用于UDP服务器的线程请求处理程序,但是由于它的工作方式(如建议的here),我不知道如何向它传递参数。我需要它来访问应用程序中的其他对象,因为它必须通知它们网络中不同客户端执行的操作。但是,表示处理程序的类不能被实例化,因此它不能通过构造函数接受参数。在

这是我代码的简化版本。在

class ThreadedUDPRequestHandler(socketserver.BaseRequestHandler):          

    def handle(self):
        data = self.request[0].strip()        
        socket = self.request[1]
        print ("{} wrote:".format(self.client_address[0]))
        print (data)
       #Ideally, I'd call a method of an object here


class ThreadedUDPServer(socketserver.ThreadingMixIn, socketserver.UDPServer):
    pass


class ServerManager():

    def __init__(self, player_box):
        self.player_box = player_box
        HOST, PORT = "xxx.xxx.xxx.xxx", 9999
        self.server = ThreadedUDPServer((HOST, PORT), ThreadedUDPRequestHandler)
        ip, port = self.server.server_address

    def start(self):             
        server_thread = threading.Thread(target=self.server.serve_forever)
        server_thread.start()

    def stop(self):
        self.server.shutdown()

在本例中,我希望请求处理程序访问的对象是player_box。目标是在每次发出请求时调用该对象的方法。有没有办法做到这一点,或者我应该使用另一种方法?在

我注意到有一个类似的问题here,但所提出的解决方案对我根本不起作用。事实上,这对我来说没什么意义。。。在


已被浏览了4461次
更新日期: 2020-09-28 07:01:39
1 个回答
fefe Tyson

这可能有点难看,但这是我最好的主意:

^{1}$

正如你所见,这个想法有两个部分:

  1. 让处理程序类具有一个类属性,该属性将从其方法中访问。在
  2. 创建这个类的子类,上面的属性将被设置为想要的值(在您的例子中是player_box对象)。在

我希望这有帮助。在

评论 - 2020年8月7日 16:58

最新Python问答

推荐Python问答