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'

原文地址:https://www.cnblogs.com/chmily/p/11502810.html