• 单例模式 与 网络编程


    单例模式:

      定义:多次实例化都指向同一个内存地址

    单例模式1  (绑定给类来   classmethod)

    class People:
        isinstances = None
    
        def __init__(self,name):
            self.name = name
    
        @classmethod
        def auth(cls):
            if cls.isinstances == None:
                cls.isinstances = cls(name)
                return cls.isinstances
    
            else:return cls.isinstances
    单例模式1(classmethod)

    单例模式2   (装饰器来验证)

    name = 'x'
    def auth(cls):
        isinstance = cls(name)
        def inter(*args,**kwargs):
            if args or kwargs:
                obj = cls(*args,**kwargs)
                return obj
            else:return isinstance
        return inter
    
    @auth
    class People:
        def __init__(self,name):
            self.name = name
    
    obj1 = People()
    obj2 = People()
    print(obj1)
    print(obj2)
    单例模式2(装饰器)

    单例模式3 (通过元类来实现)

    class Mymeta(type):
        def __init__(cls,class_name,bass_class,class_dic):
            cls.__isinstance = cls('x')
    
        def __call__(cls, *args, **kwargs):
            if args or kwargs:
                obj = cls.__new__(cls)
                cls.__init__(obj,*args,**kwargs)
                return obj
            else:return cls.__isinstance
    
    class auth(metaclass=Mymeta):
        def __init__(self,name):
            self.name = name
    
    obj1 = auth()
    obj2 = auth()
    print(obj1)
    print(obj2)
    通过元类来实现

    单例模式4 (通过倒模块来实现)

    def f1():
        from settings import isinstances
        print(isinstances)
    
    def f2():
        from settings import isinstances
        print(isinstances)
    
    f1()
    f2()

    网络编程

    网络编程:

      服务端与客户端

      服务端:(并发)

        同时给多个用户服务

        对外一直提供服务

        地址一直不变

        服务端应支持并发

      网络: 用来数据交互(通信)

     

      互联网协议:(统一通信标准)即 OSI 七层协议

     

    OSI 七层协议:

       应用层:端口地址( 浏览器默认端口80 )(应用软件,http,ftp)         

      传输层: TCP协议(三次握手四次挥手)/ udp协议

      网络层: IP地址(找到某一个局域网)                       IP协议 (ARP协议把IP解析成max地址)

      数据链路层:(找到某一台计算机)                                   以太网协议 ethernet

           以数据包的形式:ARP协议 (靠吼)

             报头:heat   (包括发送地址,接受地址)    发送地址,接收地址指网卡的地址(mac)

             数据:date 

      物理层:发送高低电信号(高1,低0)

    TCP: 流士协议 (好处是不会丢包,发一份包过去一定要收到回应,没收到再发)

    TCP 三次握手(建链接),四次挥手(断链接)
    三次握手: SYS_SENT 表示客户端向服务端发送连接请求
    SYS_RCVD 服务端同意同时向客户端发送连接请求
    ESTABLISHED 客户端同意收到服务端发送的链接请求 established
    ESTABLISHED 服务端收到同意链接请求

    四次挥手:客户端向服务端发送数据的这条管道
    FIN_WAIT_1:客户端向服务端发送断连接请求
    CLOSE_WAIT:服务端同意请求
    FIN_WAIT_2:客户端收到回应
    客户端向服务端发送数据的这条管道断开

    服务端向客户端发送数据的这条管道
    LAST_WAIT:服务端向客户端发送断连接请求
    TIME_WAIT:客户端同意断连接请求


      

    基于网络协议通信的套接字( AF-INET)

    import socket
    
    # 买手机
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    # 绑定自己的IP地址与端口地址
    phone.bind(('130',8080))
    
    # 开机
    phone.listen(5)  # 同一时刻最大请求数为 5 个
    
    # 等待别人发请求
    conn,client_adress = phone.accept() # 双向套接字对象,存放客户端的 IP 与 端口的小元祖
    
    # 收消息
    date = conn.recv(1024)  # 接收的最大字节数
    print('收到客户的信息:%s'%date)
    
    # 发消息
    conn.send(date.upper())
    
    conn.close()
    
    phone.close()
    服务端(serevice)
    import socket
    # 客户端不需要绑定自己的 IP 与 端口
    
    # 买手机
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    # 拨号(需要知道服务端的IP)
    phone.connect(('192.168.13.232',8085))
    
    # 发消息
    phone.send('+++++++ your is sb ++++++'.encode('utf-8'))
    
    # 收消息
    date = phone.recv(1024)
    print('收到服务端的信息:',date.encode('utf_8'))
    
    # 断链接
    phone.close()
    客户端(Client)

      

        

  • 相关阅读:
    检测一个对象方法是否存在
    非堵塞 延迟脚本 高性能
    移动开发 相关 备忘
    元素透明 渐变函数
    cookie
    media query 单位
    前端入门可参考《如何教会非计算机专业的女友写代码》
    JQ判断复选框是否选中
    聊天记录
    JS获取文本值
  • 原文地址:https://www.cnblogs.com/liu--huan/p/9550630.html
Copyright © 2020-2023  润新知