zoukankan      html  css  js  c++  java
  • socketserver 实现TCP并发

    socketserver 模块

    # 使TCP协议支持并发操作
    ​
    # 服务端
    import socketserver
    ​
    class MyServar(socketserver.BaseRequestHandler):                             # 必须继承 BaseRequestHandler 类
        def handle(self):                                                        # 必须定义handle函数.
            """
            收发数据的逻辑
            :return:
            """
            conn = self.request                                                  # 获取客户端消息
            cli_addr = self.client_address                                       # 获取客服端 ip+端口
            while True:                                                          # 循环
                # 接收消息
                msg = conn.recv(1024)                                            # 收发数据的逻辑
                print(msg.decode())
                # 发送消息
                data = input("发送消息")
                conn.send(data.encode())
    ​
    servar = socketserver.ThreadingTCPServer(("127.0.0.1",9006),MyServar)       # 相当于创建,绑定,
    servar.serve_forever()                                                      # While 循环一直监听是否有客户端请求到达 ...
    ​
    # 客户端
    import socket
    ​
    sk = socket.socket()
    sk.connect(("127.0.0.1",9006))
    while True:
        # 发送消息
        data = input("发送消息")
        sk.send(data.encode())
        # 接收消息
        msg = sk.recv(1024)
        print(msg.decode())
    ​
    sk.close()
    

      

    hashlib & hmac 加密算法模块

    # hashlib 加密算法模块
    import hashlib
    ​
    hm = hashlib.md5("加盐")                        # 创建md5对象并加盐
    hm.updata("加密内容".encode())                  # 更新内容进行算法运算
    res = hm.hexdigest()                           # 拿到运算后的32位16进制数
    ​
    ​
    # hmac 加密算法模块
    import hmac
    ​
    hn = hmac.new("加盐".encode(),"数据".encode())
    res = hn.hexdigest()
    print(res)
    

      

    动态加密

    import hashlib,os     # rangdom也可以
    ​
    salt = os.urandom(10000)               # 获取长度为10000的随机字节流
    hm = hashlib.md5(salt)
    hm.update("我爱你".encode())
    res_hm = hm.hexdigest()
    print(res_hm)
    

      

    文件校验

    import hashlib,hmac
    ​
    # 针对小文件一次性读出来
    def hashmd5_file(hm,filename):
        with open(filename, "rb") as f:
            data = f.read()
            hm.update(data)
            return hm.hexdigest()
    ​
    obj1 = hashlib.md5()
    obj2 = hashlib.md5()
    hm_ceshi1 = hashmd5_file(obj1,"ceshi1.txt")
    hm_ceshi2 = hashmd5_file(obj2,"ceshi2.txt")
    ​
    if hm_ceshi1 == hm_ceshi2:
        print("校验合法")
    else:
        print("不合法")
        
    # 针对大文件分批进行
    def hmac_file(hn,file_name):
        numsize = os.path.getsize(file_name)
        with open(file_name, "rb") as f:
            while numsize:
                data = f.read(128)
                hn.update(data)
                numsize -= len(data)
            return hn.hexdigest()
    ​
    hn1 = hmac.new("盐".encode())
    hn2 = hmac.new("盐".encode())
    ​
    ceshi1 = hmac_file(hn1,"ceshi1.txt")
    ceshi2 = hmac_file(hn2,"ceshi2.txt")
    if ceshi1 == ceshi2:
        print("校验合法")
    else:
        print("不合法")
    

      

    服务器校验

    # 模拟支付宝服务端
    import socketserver,os,hmac
    ​
    class MyServer(socketserver.BaseRequestHandler):
        miyu = "夜袭寡妇村"     # 密语
        def handle(self):
            conn = self.request
            cil_addr = self.client_address
    ​
            auth_code = os.urandom(128)
            conn.send(auth_code)
    ​
            cli_hmac = conn.recv(32).decode()
            hn = hmac.new(auth_code, MyServer.miyu.encode())
            servar_hmac = hn.hexdigest()
    ​
            if cli_hmac == servar_hmac:
                conn.send("支付成功~".encode())
            else:
                conn.send("滚~".encode())
    ​
    ​
    servar = socketserver.ThreadingTCPServer(("127.0.0.1",3452),MyServer)
    servar.serve_forever()
    ​
    # 模拟合作服务端
    ​
    import socket,hmac
    # 密语
    miyu = "夜袭寡妇村"
    sk = socket.socket()
    sk.connect(("127.0.0.1",3452))
    ​
    auth_code = sk.recv(128)
    hn = hmac.new(auth_code,miyu.encode())
    ​
    msg = hn.hexdigest()
    sk.send(msg.encode())
    ​
    print(sk.recv(1024).decode())
    ​
    sk.close()
    

      

     

     

  • 相关阅读:
    uvm_reg_map——寄存器模型(八)
    uvm_reg_block——寄存器模型(七)
    mysql_secure_installation 安全安装(用于生产环境设置)
    一键安装nginx-1.12.2
    nginx优化之隐藏版本号
    shell script 之六:循环 while
    shell script 之五:循环控制 for
    shell script 之四:流程控制 if 分支语句
    shell script 之三:打印输出 echo printf
    shell script 之一:变量和赋值
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/13550135.html
Copyright © 2011-2022 走看看