python中socketserver的一个疑问
PHP中文网
PHP中文网 2017-04-17 17:32:27
[Python讨论组]

书上代码如下:

一个基于sockerserver的小型服务器

from socketserver import TCPServer,StreamRequestHandler

class Handler(StreamRequestHandler):

def handle(self):                  
    print(type(self.request))
    addr = self.request.getpeername()    
    print('Got connection from ',addr)
    self.wfile.write(b'thank you for connecting...')

server = TCPServer(('li-linfeng1',1234),Handler)
server.serve_forever()

我的问题是,Handler中的self.request为什么是一个socket对象呢?

self.request所在的类BaseRequestHandler源代码如下,从源代码中也看不出self.request是socket对象,求问是怎么知道这个self.request是socket对象,从而可以调用getpeername()方法的呢?

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 __init__(self, request, client_address, server):
    self.request = request
    self.client_address = client_address
    self.server = server
    self.setup()
    try:
        self.handle()
    finally:
        self.finish()

def setup(self):
    pass

def handle(self):
    pass

def finish(self):
    pass
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号