zoukankan      html  css  js  c++  java
  • 网络基础

    一.面型对象多继承

    1.例子
     1 class A(object):
     2     def f1(self):
     3         print('a')
     4 
     5 class B(object):
     6     def f1(self):
     7         print('b')
     8 
     9 class C(A,B):
    10     def f1(self):
    11         print('c')
    先找左,再找右
    2.经典类和新式类(python3里只有新式类)
    区别:查找的流程顺序不同
    py2:
    经典类
    新式类:自己或自己的前辈只要有人继承了object,那么此类就是新式类
    py3:
    新式类

    经典类:一条道走到黑.(深度优先)
    新式类:不是广度优先,是通过C3算法实现的.
    C3算法:(在py2.3的官方文档中可找到)
    Foo+(B,C,D,F,G)+(I,G,D,G,W)+(I,G,D,G,W)
    获取第一个表头,和其他的表尾进行比较(每拿走一个都要回到第一个表头重新开始)
    不存在则拿走
    存在,则放弃,然后获取第二个表的表头 ,再和其他表的表尾进行比较
    经典类:

    广度优先:

    C3算法例:
     1 class A(object):
     2     pass
     3 
     4 class B(A):
     5     pass
     6 
     7 class C(B):
     8     pass
     9 
    10 class D(object):
    11     pass
    12 
    13 class E(D,C):
    14     pass
    15 
    16 class F(object):
    17     pass
    18 
    19 class G(F):
    20     pass
    21 
    22 class H(C,G):
    23     pass
    24 
    25 class Foo(E,H):
    26     pass
    27 
    28 print(E.__mro__)  #(<class '__main__.E'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
    29 print(H.__mro__)
    30 print(Foo.__mro__)
    知识点:
    print(函数名.__mro__)  #打印E函数的继承顺序 super就是遵循的这个罗流程python2中没有__mro__
    实例图解:

     1 L(Foo+L(E)+L(H))
     2 
     3 L(E)=(D,object)+(C,B,A,object)
     4 ED
     5 L(E)=(object)+(C,B,A,object)
     6 EDC
     7 L(E)=(D,object)+(B,A,object)
     8 EDCB
     9 L(E)=(D,object)+(A,object)
    10 EDCBA
    11 L(E)=(D,object)+(object)
    12 EDCBAobject
    13 
    14 L(H)=(C,B,A,object)+(G,F,object)
    15 HC
    16 L(H)=(B,A,object)+(G,F,object)
    17 HCB
    18 L(H)=(A,object)+(G,F,object)
    19 HCBA
    20 L(H)=(object)+(G,F,object)
    21 HCBAG
    22 L(H)=(object)+(F,object)
    23 HCBAGF
    24 L(H)=(object)+(object)
    25 HCBAGFobject
    26 
    27 L(Foo)=(E,D,C,B,A,object)+(H,C,B,A,G,F,object)
    28 Foo,E,D,H,C,B,A,G,F,object
    C3算法计算步骤
    C3算法适应新式类中较复杂的如果对于简单的,可以这样快速记忆(留个根)

    
    

    C3算法的本质就是Merge,不断地把mro()函数返回的序列进行Merge,规则如下:

    
    

    1. 如果第一个序列的第一个元素,是后续序列的第一个元素,或者不再后续序列中再次出现,则将这个元素合并到最终的方法解析顺序序列中,并从当前操作的全部序列中删除。

    
    

    2. 如果不符合,则跳过此元素,查找下一个列表的第一个元素,重复1的判断规则


    二.网络基础

    a.软件
    客户端:C/S架构,Client --> Servr 客户端与服务端架构
    浏览器:B/S架构,Browser -> Sever 浏览器端与服务端架构
    什么是bs架构,什么是cs架构
    bs是通过浏览器访问的,cs是通过客户端访问
    在cmd中ipconfig可以可以查看自己的地址
    b.如何实现相互通信
    (1)编写两个软件,软件之间相互通信
    (2)两个人之间通信用网线
    (3)一个地区的多个机器相互通信用交换机
    使用IP地址:ipconfig/ifconfig
    我的:192.168.13.56(局域网的范围是0-255)
    (4)公网IP(全球有限,可以租公网IP)
    相互之间通信本质上都是01010101
    交换机的作用(让相互之间组成一个局域网)
    通过ipconfig查看的是内网IP
    c.基于socket模块实现网络通信
     1         import socket  #引入socket模块
     2         sever=socket.socket()  #socket模块的py文件中有一个socket类,将这个类实例化(创建了一个socket对象)
     3         # 绑定IP和端口
     4         sever.bind(('192.168.13.137',8002)) #绑定一个地址(), 端口(为了让程序和程序之间相互隔离)
     5 
     6         sever.listen(5)  #后面最多排五个
     7         # 等待客户端来连接,如果没人来连接,就一直等
     8         conn,addr=sever.accept()   ########在此会阻塞
     9         # print(conn,addr)  #conn是客户端和服务端连接的对象,服务端以后就要通过该对象进行收发数据
    10                             #addr是客户端的地址信息
    11         print('有人来连接了',conn,addr)
    12         data=conn.recv(1024)  #最多一次性接收1024字节
    13         print(data)
    14         # 服务端通过伞,给客户恢复了一个消息
    15         conn.send(b'stop')
    16         # 放开那把伞
    17         conn.close()
    18         # 关闭服务端
    19         sever.close()
    服务端
     1         import socket
     2 
     3         client=socket.socket()
     4         # 阻塞,直到连接成功后才继续往下走
     5         client.connect(('192.168.13.137',8002))  #里面只能装一个元组
     6         # 连接上服务端后,向服务端发送一个消息
     7         client.send(b'hello,')
     8         # 客户端等待服务端回复消息
     9         data=client.recv(1024)
    10         print(data)
    11         # 关闭自己
    12         client.close()
    客户端

    应用socket模块实现登录

     1 import socket
     2 
     3 sever=socket.socket()
     4 
     5 sever.bind(('192.168.13.137',8011))
     6 
     7 sever.listen(9)
     8 while True:
     9 
    10     conn,addr=sever.accept()
    11 
    12     username=conn.recv(1024)
    13     password=conn.recv(1024)
    14     f=open('chect.txt',mode='r',encoding='utf-8')
    15     for line in f:
    16         name,pwd=line.strip().split('@@')
    17         if name==username.decode('utf-8') and pwd==password.decode('utf-8'):
    18             conn.send('登录成功'.encode('utf-8'))
    19             break
    20         else:
    21             continue
    22 
    23     else:
    24         conn.send('用户名或密码错误'.encode('utf-8'))
    服务端
     1 import socket
     2 
     3 client=socket.socket()
     4 
     5 client.connect(('192.168.13.137',8011))
     6 
     7 name=input('请输入用户名:')
     8 pwd=input('请输入密码:')
     9 
    10 client.send(name.encode('utf-8'))
    11 client.send(pwd.encode('utf-8'))
    12 
    13 ret=client.recv(1024)
    14 print(ret.decode('utf-8'))
    15 client.close()
    客户端
    为什么网络通信发送的是字节
    py3,send,rece都是字节
    py2,send,rece都是字符串
  • 相关阅读:
    分数加减法
    两点距离
    1的个数
    Swift 了解(1)
    ARC快速入门
    ARC基本概念
    autorelease注意事项
    autorelease基本使用
    NSTimer的使用
    如何监听控件的行为
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/9578745.html
Copyright © 2011-2022 走看看