• 基于TCP/IP实现简单的 登录校验



    下文所用文档内容
    "userinfo.txt"
        zhangsan:e7a6d0f97db7ea1c4a0c1c137cbf771c     
    		lisi:c79439cf9abcbd6c6d46e45766a9e64a
    wangwu:f77599e7005939d280742dc8eb5db89a
    zhaoliu:00ce36c50bbc8c067a5a7a628ca14688

      

    Server

    # ### 服务端
    import hashlib
    import socket
    import json
    
    def get_md5_code(usr,pwd):
        # 将用户名作为加密的盐key
        hm = hashlib.md5(usr.encode())
        hm.update(pwd.encode())
        res = hm.hexdigest()
        return res
        
    sk = socket.socket()
    sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    sk.bind( ("127.0.0.1",9000) )
    sk.listen()
    conn,addr = sk.accept()
    
    # 处理收发数据的逻辑
    # 先接受二进制字节流 -> 字符串
    msg = conn.recv(1024).decode()
    print(msg,type(msg))
    # 把字符串 -> 字典
    dic = json.loads(msg)
    print(dic,type(dic))
    
    # 标识符,默认False
    sign = False
    with open("userinfo.txt",mode="r",encoding="utf-8") as fp:
        for line in fp:
            usr,pwd = line.strip().split(":")
            if usr == dic["username"] and pwd == get_md5_code(dic["username"],dic["password"]):
                # 登陆成功 返回状态吗为1
                res = {"code":1}
                res_msg = json.dumps(res).encode()
                conn.send(res_msg)
                # 如果登录成功,默认改成True
                sign = True
                break
                
    if sign == False:
        #登录失败,返回状态码为0
        res = {"code":0}
        conn.send(json.dumps(res).encode())
                
                
    
    # 四次挥手
    conn.close()
    # 退还端口
    sk.close()
    
    """
    # 复习:文件对象是迭代器
    fp = open("userinfo.txt",mode="r",encoding="utf-8")
    from collections import Iterator,Iterable
    print( isinstance(fp,Iterator) )
    """

    Client

    # ### 客户端
    import socket,json
    client = socket.socket()
    client.connect( ("127.0.0.1",9000) )
    
    usr = input("请输入您的账户:")
    pwd = input("请输入您的密码:")
    dic = {"username":usr,"password":pwd,"status":"login"}
    # 返回json格式的字符串
    res = json.dumps(dic)
    # 在把json字符串转换成字节流
    bytes_msg = res.encode()
    # 发送给服务端
    client.send(bytes_msg)
    
    # 接受服务端发送回来的数据
    res_msg = client.recv(1024).decode()
    # 把字符串变成字典
    dic_code = json.loads(res_msg)
    
    if dic_code["code"]:
        print("恭喜你,登陆成功")
    else:
        print("抱歉,登陆失败")
    
    # 关闭链接
    client.close()
  • 相关阅读:
    设计模式之工厂模式-抽象工厂(02)
    1036 跟奥巴马一起编程 (15 分)
    1034 有理数四则运算 (20 分)
    1033 旧键盘打字 (20 分)
    1031 查验身份证 (15 分)
    大学排名定向爬虫
    1030 完美数列 (25 分)二分
    1029 旧键盘 (20 分)
    1028 人口普查 (20 分)
    1026 程序运行时间 (15 分)四舍五入
  • 原文地址:https://www.cnblogs.com/max404/p/11845073.html
Copyright © 2020-2023  润新知