zoukankan      html  css  js  c++  java
  • 面向对象多继承和网络编程

    一丶面向对象多继承

      1.先找左再找右

    class A(object):
        pass
    
    class B(object):
        def f1(self):
            print('B')
    
    class C(A,B):
        pass
    
    obj = C()
    obj.f1()
    先找左边再找右边

      2.经典类和新式类

        Python2:

          经典类

          新式类:如果自己或自己的前辈只要有人继承了object,那么此类就是新式类.

        Python3:

          新式类

         经典类和新式类的查找成员的顺序不一样

          经典类:一条道走到黑(深度优先).

          新式类,c3算法实现(Python2.3更新的c3算法)

    class A(object):
        pass
    
    class B(A):
        pass
    
    class C(B):
        pass
    
    class D(object):
        pass
    
    class E(D,C):
        pass
    
    class F(object):
        pass
    
    class G(F):
        pass
    
    class H(C,G):
        pass
    
    class Foo(E,H):
        pass
    
    """
    L(Foo + L(E)  + L(H) )
    
    L(E) = E,D,C,B,A,object
    L(H) = H,C,B,A,G,F,object
    
    Foo = (object) + (G,F,object)
    Foo,E,D,H,C,B,A,G,F,object
    """
    print(Foo.__mro__)
    c3算法

       获取第一个的表头和其它除表头位比较,如果不存在则拿走.如果存在,则放弃,然后获取第二个表的表头再次和其它表的除表头位进行比较. 

     二丶网络编程

      1.软件

        客户端:CS架构,client --> server

        浏览器:BS架构,browser -->server

      2.如何实现相互通信

           1.可以编写两个软件,软件之间相互通信

        2.两个人直接连接(通过网线连接)

        3.教室相互通信(通过交换机)

          使用IP地址: ipconfig/ifconfig

        4.和远方的女友通信(交换机+n个路由器)

      总结:

        1.相互通信的本质发生01010101

        2.交换机作用

        3.通过ipconfig查看自己的内网ip

        4.公网IP,掏钱

       3.基于socket模块实现网络通信

        服务器:

    import socket
    
    # 创建服务端socket对象
    server = socket.socket()
    # 绑定IP和端口
    server.bind(('192.168.13.220',8000))
    # 后边可以等5个人
    server.listen(5)
    print('服务端准备开始接收客户端的连接')
    # 等待客户端来连接,如果没人来就傻傻的等待。
    # conn是客户端和服务端连接的对象(伞),服务端以后要通过该对象进行收发数据。
    # addr是客户端的地址信息。
    # #### 阻塞,只有有客户端进行连接,则获取客户端连接然后开始进行通信。
    conn,addr = server.accept()
    print('已经有人连接上了,客户端信息:',conn,addr)
    # 通过对象去获取
    # 1024表示:服务端通过获取数据时,一次性最多拿1024字节。
    data = conn.recv(1024)
    print('已经有人发来消息了',data)
    # 服务端通过连接对象给客户端回复了一个消息。
    conn.send(b'stop')
    # 与客户端断开连接
    conn.close()
    # 关闭服务端的服务
    server.close()
    服务器

        客户端:

    import socket
    
    client = socket.socket()
    # 王晓东向服务端发起连接请求(递伞)
    # 阻塞,去连接,直到连接成功后才会继续向下走。
    client.connect(('192.168.13.220',8000))
    # # 链接上服务端后,向服务端发送消息
    client.send(b'hello')
    # 王晓东等待服务端给他发送消息
    data = client.recv(1024)
    print(data)
    # 关闭自己
    client.close()
    客户端

    结果:

      当客户端跟服务器端相互交换完数据后:

      客户端:

       

        为什么要网络通信发送的是字节?而不是字符串?

          Python3:  send/recv都是字节

          Python2:  send/recv都是字符串

        服务端:

          accept:阻塞,等待客户端来连接

          recv:  阻塞,等待客户端发来数据.

        客户端:

          connect:  阻塞,一直在连接,直到连接成功才往下运行其他代码

          recv;  阻塞,等待服务端发来数据.

      4.客户端如何跟服务器端一直交互,直到输入某个指令为止

        服务端

    import socket
    
    server = socket.socket()
    server.bind(('192.168.13.220',8001))
    server.listen(5)
    while True:
        conn,addr = server.accept()
        # 字节类型
        while True:
            data = conn.recv(1024) # 阻塞
            if data == b'exit':
                break
            response = data + b' ==_=='
            conn.send(response)
        conn.close()
    服务端

        客户端

    import socket
    
    sk = socket.socket()
    sk.connect(('192.168.13.220',8001))
    while True:
        name = input("请输入姓名:")
        sk.send(name.encode('utf-8')) # 字节
        if name == 'exit':
            break
        response = sk.recv(1024) # 字节
        print(response.decode('utf-8'))
    
    sk.close()
    客户端
  • 相关阅读:
    Shared Memory in Windows NT
    Layered Memory Management in Win32
    软件项目管理的75条建议
    Load pdbs when you need it
    Stray pointer 野指针
    About the Rebase and Bind operation in the production of software
    About "Serious Error: No RTTI Data"
    Realizing 4 GB of Address Space[MSDN]
    [bbk4397] 第1集 第一章 AMS介绍
    [bbk3204] 第67集 Chapter 17Monitoring and Detecting Lock Contention(00)
  • 原文地址:https://www.cnblogs.com/qicun/p/9578930.html
Copyright © 2011-2022 走看看