zoukankan      html  css  js  c++  java
  • python 并发编程

    1,并发编程

      1,什么是并发编程:在tcp协议中多个客户端访问同一个服务端的时候,由于tcp基本的网络连接方式是单线链接的,所以由此引出了并发编程,让多个客户端访问同一个服务端的情况就是并发编程。

      2,socketserver模块的使用就是解决多客户端访问服务端的情况:

        

    #并发编程需要注意的是服务端的接收,客户端按照以往的形式来就好
    import socketserver
    class Myserver(sockerserver.BaseRequestHandler):
        def handler(self):
            while True:
                ret = self.resquest.recv(1024).decode('utf-8')#接收参数
                print(ret)
                self.request.send('hi'.encode('utf-8'))#此处不能使用input方式
               
    if __name__ == '__main__':
        socketserver.TCPServer.allow_reuse_address = True
        server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
        server.serve_forever()
    
    
    #服务端的基本结构并发编程方式
    
    #client端口
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    sk.send('nihaoi'.encode('utf-8'))
    t = sk.recv(1024).decode('utf-8')
    print(t)
    sk.close()
    

    2,验证客户端的合法性

    #server端口
    import socket
    import os
    import hashlib
    
    secret_key = '老衲洗头用飘柔'.encode('utf-8')  
    sk= socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    
    conn,mag= sk.accept()            
    random_bytes = os.urandom(32)  #传输一个32位数的随机数字
    conn.send(random_bytes)    #发送过去
    md5 = hashlib.md5(secret_key)    #利用hashilb算法加密加盐
    md5.update(random_bytes)        加密
    ret = md5.hexdigest()
    end_recv = conn.recv(1024).decode('utf-8')
    if end_recv == ret:     #两边判断  
        print('合法客户端')
    else:
        print('不合法客户端')
    conn.close()
    sk.close()                
    
    
    
    #client
    
    import socket
    import hmac
    
    secret_key = '老衲洗头用飘柔'.encode('utf-8')
    sk= socket.socket()
    sk.connect(('127.0.0.1',9000))
    
    # random_bytes = os.urandom(32)
    ret = sk.recv(1024)
    md5 = hmac.new(secret_key,ret)  加密方式不同但是思路相同
    rt = md5.hexdigest()
    sk.send(rt.encode('utf-8'))
    print('----------')
    sk.close()
    

     

  • 相关阅读:
    Mybatis学习笔记(八) —— Mybatis整合spring
    Mybatis学习笔记(七) —— 关联查询
    Mybatis学习笔记(六) —— 动态sql
    Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)
    Mybatis学习笔记(四) —— SqlMapConfig.xml配置文件
    Mybatis学习笔记(三) —— DAO开发方法
    Mybatis学习笔记(二) —— mybatis入门程序
    Mybatis学习笔记(一) —— mybatis介绍
    tomcat的热部署配置
    int bool 字符串 列表 字典 集合
  • 原文地址:https://www.cnblogs.com/wpcbk/p/9048639.html
Copyright © 2011-2022 走看看