• 2019.9.10学习内容及随堂笔记


    小结

    上节课回顾

    基于socketserver的服务端

    服务端
    # 实现并发
    import socketserver
    
    class Mytcp(socketserver.BaseRequestHandler):
        def handle(self):
            try:
                while True: #通信循环
                    data = self.request.recv(1024)
                    print(data)  #b'dog'
                    if len(data) == 0:
                        return
                    self.request.send(data.upper())
            except Exception:
                pass
    
    
    
    if __name__ == '__main__':
        server = socketserver.ThreadingTCPServer(('127.0.0.1', 8089), Mytcp)
        server.serve_forever()
        
        
    客户端
    import socket
    
    soc = socket.socket()
    soc.connect(('127.0.0.1', 8089))
    
    while True:
        msg = input('>>>:')
        soc.send(msg.encode('utf-8'))
        data = soc.recv(1024)
        print(data) #b'DOG'
    

    基于socket的udp协议

    '''
    网络是什么:连接介质+协议
    协议: osi7层协议
    5层协议
         -从下往上
         -物理层  01010101
         -数据链路层    进行分组:数据报、数据帧   mac地址
         -网络层: ip   通过ip得到mac地址----arp协议   mac地址学习
         -传输层: tcp/udp   三次握手和四次挥手,可靠传输
         -应用层: 写的程序都是在应用层,基于socket(基于网络和传输抽象出来的)/http协议/邮件
    
    socket编写tcp的客户端和服务端
        -传输文件:自己定制了协议
        -粘包问题终极解决方案
             -struct模块先把头的长度包成四个字节,发送四个字节
             -发送头
             -发送内容
             -接收端
                  -接收4个字节
                  -接收头部,取出数据长度
                  -接收数据长度
    
    socket编写udp的客户端和服务端
         -不需要建立连接,传输不可靠,数据报协议(自己有头)
    
    socketserver写支持并发的服务端
    '''
    # #with 上下文管理器
    # with open('a.test', 'rb')as f:
    #     for line in f:
    #         print(line)
    
    class Open():
        def __enter__(self):
            print('xxxx')
            pass
        def __exit__(self, exe_type, exc_val, exc_tb):
            print('yyyy')
            pass
    with Open() as f:
        #代码
        f.name='xxx'
    
    

    面向对象串讲

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

    网络编程

    '''
    网络是什么:连接介质+协议
    协议: osi7层协议
    5层协议
         -从下往上
         -物理层  01010101
         -数据链路层    进行分组:数据报、数据帧   mac地址
         -网络层: ip   通过ip得到mac地址----arp协议   mac地址学习
         -传输层: tcp/udp   三次握手和四次挥手,可靠传输
         -应用层: 写的程序都是在应用层,基于socket(基于网络和传输抽象出来的)/http协议/邮件
    
    socket编写tcp的客户端和服务端
        -传输文件:自己定制了协议
        -粘包问题终极解决方案
             -struct模块先把头的长度包成四个字节,发送四个字节
             -发送头
             -发送内容
             -接收端
                  -接收4个字节
                  -接收头部,取出数据长度
                  -接收数据长度
    
    socket编写udp的客户端和服务端
         -不需要建立连接,传输不可靠,数据报协议(自己有头)
    
    socketserver写支持并发的服务端
    '''
    # #with 上下文管理器
    # with open('a.test', 'rb')as f:
    #     for line in f:
    #         print(line)
    
    class Open():
        def __enter__(self):
            print('xxxx')
            pass
        def __exit__(self, exe_type, exc_val, exc_tb):
            print('yyyy')
            pass
    with Open() as f:
        #代码
        f.name='xxx'
    
    
  • 相关阅读:
    @try { } @catch (NSException *exception) {} @finally {}
    键盘点出来就退不掉了,你可以把这几句加到有键盘的控制器里
    测试最新的微信iOS SDK 报错误
    堆、栈知识小结
    PV操作
    continue & break
    dll的def文件与__declspec(dllexport)导出函数方式比较
    setupapi.h和setupapi.lib該如何使用
    批量缺少头文件的解决办法(添加包含目录)
    易犯错误总结:
  • 原文地址:https://www.cnblogs.com/chmily/p/11502810.html
Copyright © 2020-2023  润新知