zoukankan      html  css  js  c++  java
  • day 34 socketserver源码分析、面向对象串讲、网络编程串讲

    socketserver源码分析

    import socketserver

    class MyTcp(socketserver.BaseRequestHandler):
    def handle(self):
    # self.server ThreadingTCPServer的对象:
    # self.request conn
    #self.client_address addr
    pass


    if __name__ == '__main__':
    server=socketserver.ThreadingTCPServer(('127.0.0.1',8001),MyTcp)
    # server=socketserver.ThreadingUDPServer(('127.0.0.1',8001),MyTcp)
    '''
    1 ThreadingTCPServer实例化:走__init__方法
    -ThreadingTCPServer(ThreadingMixIn, TCPServer)的__init__方法,没有,走的父类:TCPServer(BaseServer)的__init__
    -TCPServer(BaseServer)的__init__又调用了父类的__init__
    -赋值操作:self.server_address = server_address
    self.RequestHandlerClass = RequestHandlerClass
    -数据放到谁当中了?放到了server这个对象中
    -socket.bind()
    -socker.listen()
    2 server.serve_forever()
    -一堆代码不需要要管:self._handle_request_noblock
    -request, client_address = self.get_request()
    -self.get_request()在Tcpserver这个类: self.socket.accept()
    - self.process_request(request, client_address):ThreadingMixIn类的process_request
    -开启线程执行ThreadingMixIn类的process_request_thread,执行了finish_request(request, client_address, self) 在 BaseServer 类中
    -request :就是咱的连接对象,conn
    -client_address 客户端ip和端口
    -self:server对象,实例化得到的server对象
    -实例化RequestHandlerClass得到一个对象:会走__init__方法
    -RequestHandlerClass没有,走的BaseRequestHandler类的__init__
    -会执行handle方法,通信逻辑
    '''
    server.serve_forever()



    面向对象串讲





    '''
    类与对象
    -__init__

    '''
    # class Person:
    # school='xxx'
    # def __init__(self): #对象初始化方法,对象的绑定方法,对象来调用会把对象传过来
    # self.name='xxx'
    #
    # p=Person() #类实例化产生对象会调用__init__
    #
    # print(p.school)
    # Person.school='uuuu'
    # p.school='yy'


    '''

    属性查找:包括数据属性,包括方法
    -数据属性:对象中找----》类中----》父类(按照mro查找)--》obj py2中没有mor这个东西
    -方法查找:对象的绑定方法---》父类中按照mro列表查找---》obj
    '''

    '''
    绑定方法:
    -定义在类内部,没有被任何装饰器装饰的函数,就是方法
    -给对象来用 对象.方法() 默认把对象自身传过去 ******特殊之处
    -类来调用就是普通函数,有几个值就传几个值
    '''

    '''
    对象之间的交互
    -把一个对象传到另一个对象中,操作这个对象
    -人狗大战
    '''
    '''
    三大特性:继承封装多态
    -继承:
    -在类名后的括号中写要继承的类,用逗号分隔
    -py中支持多继承(属性查找顺序)
    -新式类和经典类
    -继承了object的类都叫新式类(py3中都是新式类)
    -py2中才有新式类,经典类之说
    -菱形问题的查找:
    -广度优先:新式类
    -深度优先:经典类
    -mro列表
    -super() 特殊对象,调用父类的方法和属性(严格按照mro列表找的)
    -self和super的区别:self一定是从根上找,super()从当前位置按照mro列表找
    -类名.方法() 就是个普通函数,这个就不按照mro列表找了,指名道姓的来用
    -派生:字类多出来的属性,方法
    -多态和多态性
    -一个事务多种形态
    -多态性:执行同一个事物的同一个方法,表现出来的结果是不一样的
    -两种限制子类必须实现什么方法的方式
    -一个abc模块
    -raise抛异常
    -鸭子类型:走路像鸭子,你就是鸭子
    -len() 调用对象.__len__()
    -封装:
    -把属性和方法隐藏
    -以__开头,就会隐藏
    -并没有实际隐藏(做了变形)
    -隐藏属性:保证数据安全
    -隐藏方法:隔离复杂度
    -property 装饰器 包装成数据属性
    -其他两个装饰器
    -classmethod:类的绑定方法:可以类来调用会自动把类传入(对象也可以调用)
    -staticmethod:静态方法,谁都可以调用,不会自动传参数
    -元类:
    -__call__
    -__new__
    -__getattr__
    -__setattr__
    -__delattr__
    _type和object
    -反射(通过字符串去获取,删除,修改,对象的属性或方法)
    -hasattr
    -getattr
    -setattr
    -delattr
    -isinstance和issubclass

    '''

    super()



    网络编程串讲


    '''
    网络是什么:链接介质+协议
    协议:osi7层
    5层协议:
    -物理层 01000101010
    -数据链路层:做分组:数据报/数据帧 mac
    -网络层:ip 通过ip得到mac地址---arp协议 mac地址学习
    -传输层:tcp/udp 三次握手四次挥手,可靠传输
    -应用层:写的程序都是应用层,基于socket(基于网络和传输抽象出来的)/http协议/邮件

    socket编写tcp的客户端和服务端:
    -传输文件:自己定制了协议
    -粘包问题终极解决方案
    -struct模块先把头的长度包成四个字节,发送四个字节
    -发送头
    -发送内容
    -接收端:
    -接收4个字节,解除头部长度
    -接收头部,取出数据长度
    -接收数据长度


    socket编写udp的客户端和服务端
    -不需要建立连接,传输不可靠,数据报协议(自己有头)

    socketserver写支持并发的服务端

    '''
    #with 上下文管理器
    # with open('a.avi','rb') as f:
    # for line in f:
    # print(line)

    class Open():
    def __enter__(self):
    print('xxxxx')
    pass
    def __exit__(self, exc_type, exc_val, exc_tb):
    print('yyyyy')
    pass

    with Open() as f:
    #代码
    f.name='xxx'



  • 相关阅读:
    MVC模式-----struts2框架(2)
    MVC模式-----struts2框架
    html的<h>标签
    jsp脚本元素
    LeetCode "Paint House"
    LeetCode "Longest Substring with At Most Two Distinct Characters"
    LeetCode "Graph Valid Tree"
    LeetCode "Shortest Word Distance"
    LeetCode "Verify Preorder Sequence in Binary Search Tree"
    LeetCode "Binary Tree Upside Down"
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11497379.html
Copyright © 2011-2022 走看看