day30日期06-09 【TCP登录】

1.两个文件客户端和服务端2.依照文件中的账号和加密过的密码,比对客户端和服务端的
用户信息一致性3.如果一致显示登录成功,否则断开连接

新建一个文件当成数据库,然后对密码进行加密
客户端输入通过把字典形式的数据分割用户名和密码和数据库中的用户名想比较,先通过json转换成字符串再转换成字节流,然后通过状态码相比较

 

服务端

import hashlib
import socket
import json

def get_md5(user,pwd):
hs=hashlib.md5("xiama".encode())
hs.update(pwd.encode())
return hs.hexdigest()
# print(get_md5("duoduo","12345"))#c26313119e10ecd8b024228e988aa87a

sk=socket.socket()
sk.bind(("127.0.0.1",9004))
sk.listen()
conn,addr=sk.accept()
#接收数据
msg=conn.recv(1024).decode()
dicc=json.loads(msg)
print(dicc)#{'username': 'xiaoma', 'password': '123456', 'operat': 'login'}

sign1=True
with open("userinfo.txt",mode="r",encoding="utf-8") as fp:
for i in fp:
user1,pwd1=i.strip().split(":")
print(user1,pwd1)

if user1==dicc["username"] and pwd1==get_md5(user,dic["password"]):
res={"code":1}
res_msg=json.dumps(res).encode()
conn.send(res_msg)
sign1=False
break
if sign1==True:
res={"code":0}
res_msg=json.dumps(res).encode()
conn.send(res_msg)

conn.close()
sk.close()

# xiama:123456
# duoduo:12345

客户端
import socket
import json
sk=socket.socket()

sk.connect(("127.0.0.1",9004))
#收发数据的逻辑
user=input("请输入您的用户名:")
pwd=input("请输入您的密码:")
#发送一个字典,json是语言交流,传输。pickle是存储
#json(元组,字符串,int dict,none所有语言都能识别)转换为字符串,再转化为字节流
#用户名和密码发过去的来意,operate
dic={"username":user,"password":pwd,"operat":"login"}
res=json.dumps(dic)
byte_msg=res.encode()
sk.send(byte_msg)
#接收服务端发送过来的数据
res_msg1=sk.recv(1024).decode()
dic_code=json.loads(res_msg1)
if dic_code["code"]:
print("恭喜您登录成功")
else:
print("抱歉登录失败了")


#两个send有可能粘包
# sk.send(b)

sk.close()



posted on 2020-06-16 11:43  轻轻的我来了呢  阅读(221)  评论(0编辑  收藏  举报