• 用户的三次登录验证及进度条


    服务器端
    import socketserver
    import json
    import hashlib
    
    def zhuce():
        pass
    
    class MySocket(socketserver.BaseRequestHandler):
        def handle(self):
            sor = b'wusir'#
            while 1:
                str_dic = self.request.recv(1024).decode('utf-8')
                # 接收到 一个字典,类似于{'status':False,'username':None,'password':None}
                if not str_dic:break # 当客户端登录失败退出程序的情况下,这里会接收到一个空消息。
                dic = json.loads(str_dic)
                if not dic['status']:
                    '''没有登录成功的情况下'''
                    with open('info','r',encoding='utf-8') as f:
                        # 文件内容的存储方式  用户名|密码
                        for info in f:
                            username,pawd_txt = info.strip().split('|')
                            if username == dic['username']:
                                '''用户存在,就对客户端发来的用户的密码再次加密,与文件中对比'''
                                md5_obj = hashlib.md5(sor)
                                md5_obj.update(dic['password'].encode('utf-8'))
                                pawd = md5_obj.hexdigest()
                                if pawd_txt == pawd:
                                    dic['status'] = True
                                else:
                                    dic['reason'] = '密码错误'
                                break
                        else:
                            dic['reason'] = '用户不存在'
                            zhuce()
                    str_dic = json.dumps(dic)
                    self.request.send(str_dic.encode('utf-8'))
                else:
                    '''已经是登录成功了'''
    
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MySocket)
    server.serve_forever()
    
    
    
    客户端
    
    
    import socket
    import hashlib
    import json
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    
    dic = {'status':False,'username':None,'password':None}
    c = 3
    while c:
        username = input('请输入用户名')
        password = input('请输入密码')
    
        md5_obj = hashlib.md5(password.encode('utf-8'))
        md5_obj.update(username.encode('utf-8'))
        pawd_m = md5_obj.hexdigest()
    
        dic['username'] = username
        dic['password'] = pawd_m
        str_dic = json.dumps(dic)
        sk.send(str_dic.encode('utf-8'))
    
        # 服务器应该回复我一个这样的字典:
        # 是否登录成功,如果没有登录成功是因为什么原因?
        res_dic = sk.recv(1024).decode('utf-8')# str_dic
        result = json.loads(res_dic)# dic = {status:False/True ,  username ,   password,   reason}
        if result['status']:
            print('登录成功')
            break
        else:
            print('失败,%s'%result['reason'])
            c -= 1
    
    sk.close()
    

      进度条

    import time
    # 1024*15 / 1500000
    for i in range(51):
        time.sleep(0.12)
        print('
    '+ (i//2)*"■" + '>' + str(i*2) + '%',end='')
    

      

  • 相关阅读:
    有效解决mysql中ONLY_FULL_GROUP_BY办法1055
    20192320杨坤Python技能树及CSDN MarkDown编辑器测评
    20192320杨坤201920202 《Python程序设计》实验三报告
    博客链接
    个人纪录20220420
    mysql 优化表空间报错Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
    spring——基于XML的AspectJ AOP开发(转载)
    spring——Spring集成AspectJ(转载)
    MyBatis框架——MyBatis是什么(转载)
    spring——Spring AOP(转载)
  • 原文地址:https://www.cnblogs.com/duanpengpeng/p/9511639.html
Copyright © 2020-2023  润新知