# ### 服务端
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) )
"""