下文所用文档内容
"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()