单例模式 与 网络编程

单例模式:

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

单例模式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)

 

 

  

 

 

 

 

 

    

 

posted @ 2018-08-28 20:32  星牧  阅读(281)  评论(0编辑  收藏  举报