zoukankan      html  css  js  c++  java
  • 基于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()
  • 相关阅读:
    Linux基本命令
    LR之流程
    Jmeter&Ant构建自动化测试平台
    正则表达式
    搭建wordpress-安装xshell
    git本地文件提交
    Git基本操作
    python-之基本语法
    SQL语句之-简单查询
    postman之请求&断言
  • 原文地址:https://www.cnblogs.com/max404/p/11845073.html
Copyright © 2011-2022 走看看