python-socketServer

 

 
创建SocketServer的那么几个步骤。

1.你必须自己创建一个处理请求类,并且要继承BaseRequestHandler,还有重写父类中的handle()方法。
 2.你必须实例化其中一个Server类型,并且传值serverip和你创建的[处理请求类]
3.然后用你创建的类调用handle_request()[只处理一个请求] serve_forever()[处理多个请求]
4.调用server_close()关闭。

 

Server类型包括:

["BaseServer", "TCPServer", "UDPServer", "ForkingUDPServer",
"ForkingTCPServer", "ThreadingUDPServer", "ThreadingTCPServer",
"BaseRequestHandler", "StreamRequestHandler",
 "DatagramRequestHandler", "ThreadingMixIn", "ForkingMixIn"]

 

"""
There are five classes in an inheritance diagram, four of which represent
synchronous servers of four types:

        +------------+
        | BaseServer |
        +------------+
              |
              v
        +-----------+        +------------------+
        | TCPServer |------->| UnixStreamServer |
        +-----------+        +------------------+
              |
              v
        +-----------+        +--------------------+
        | UDPServer |------->| UnixDatagramServer |
        +-----------+        +--------------------+


常用方法的简单说:

    def fileno(self):
    返回文件描述符
    
    def handle_request(self):
    处理单个请求
        
    def serve_forever(poll_interval=0.5):
    处理多个请求,poll_interval,每0.5秒检测是否有shutdown请求。
    
    def service_actions():
    一旦执行shutdown,立刻执行service_actions
    
    def shutdown():
    停止
    
    def server_close():
    关闭服务
    
    def defaddress_family():
    地址簇
    
    class RequestHandlerClass:
    请求处理类
    
    server_address
    ip地址
    
    allow_reuse_address
    重用地址。
    
    socket_type
    协议类型
    
    timeout
    超时时间
    
    finish_request()
    
    
"""

实例

class duofuRequestHandler(socketserver.BaseRequestHandler):

    def handle(self):
        """"
            handle 中 处理所有与客户端的交互,包括多次交互,多用户交互等等。
        """
        while True:
            try:
                self.data = self.request.recv(1024).strip().decode()
            except ConnectionResetError as e:
                break
            print('客户端信息:',self.client_address)
            print('data',self.data)
            if not self.data:
                """说明客户端断开"""
            self.request.send('你说了:{0}'.format(self.data).encode('utf-8'))



if __name__ == '__main__':
    HOST,PORT = '127.0.0.1',8999

    server = socketserver.ThreadingTCPServer((HOST,PORT),duofuRequestHandler)

    server.serve_forever()

 

posted @ 2018-05-18 17:15  豆腐不怕卤水的经历  阅读(179)  评论(0编辑  收藏  举报