我是Python的新手,我正在上一些在线安全课程。我必须承认,课程的整个概念还不是很清楚,所以这可能就是我没有完全理解这个概念的原因。他们在python.org网站上说:
创建服务器需要几个步骤。首先,你必须创建一个 通过继承BaseRequestHandler类和请求处理程序类 覆盖其handle()方法;这个方法将处理传入 要求。其次,您必须实例化其中一个服务器类, 传递服务器的地址和请求处理程序类。
有人可以更好地解释这个吗?你为什么要创建一个子类?从理论的角度来看,我可以理解使用类的强大功能,我还没有在我的测试脚本中使用它们,但是还没有达到这个目标。#ha;#ha;"时刻。这是我正在学习的课程的脚本:
#!/usr/bin/python
import SocketServer
class EchoHandler(SocketServer.BaseRequestHandler):
def handle(self):
print "Got Connection from : ", self.client_address
data = 'dummy'
while len(data):
data = self.request.recv(1024)
print "Client sent: " + data
self.request.send(data)
print "client left"
serverAddr = ("0.0.0.0", 9000)
server = SocketServer.TCPServer(serverAddr, EchoHandler)
server.serve_forever()
答案 0 :(得分:1)
SocketServer.BaseRequestHandler
是处理引擎盖下处理的模板。但它实际上并没有对请求做任何事情。
子类化允许您在该模板上构建,仅添加特定于您的实现的部分,但仍保留基础的所有功能。您可以定义def handle(self)
并对所需数据进行特定处理。
答案 1 :(得分:1)
BaseRequestHandler
处理您的服务器请求。为了获得对这个类的访问,你需要创建一个子类,它(通过作为一个子类)将允许你访问你需要访问的BaseRequestHandler
的各种方法来处理请求在你的服务器上。看一下BaseRequestHandler
类from the source,并注意handle方法只有pass
,因此它没有做任何事情(
class BaseRequestHandler:
"""Base class for request handler classes.
This class is instantiated for each request to be handled. The
constructor sets the instance variables request, client_address
and server, and then calls the handle() method. To implement a
specific service, all you need to do is to derive a class which
defines a handle() method.
The handle() method can find the request as self.request, the
client address as self.client_address, and the server (in case it
needs access to per-server information) as self.server. Since a
separate instance is created for each request, the handle() method
can define arbitrary other instance variariables.
"""
...
def handle(self):
pass
...
您的代码需要使handle
方法执行某些操作,并通过创建BaseRequestHandler
的子类来实现。