服务器端
import socketserver
import json
import hashlib
def zhuce():
pass
class MySocket(socketserver.BaseRequestHandler):
def handle(self):
sor = b'wusir'#
while 1:
str_dic = self.request.recv(1024).decode('utf-8')
# 接收到 一个字典,类似于{'status':False,'username':None,'password':None}
if not str_dic:break # 当客户端登录失败退出程序的情况下,这里会接收到一个空消息。
dic = json.loads(str_dic)
if not dic['status']:
'''没有登录成功的情况下'''
with open('info','r',encoding='utf-8') as f:
# 文件内容的存储方式 用户名|密码
for info in f:
username,pawd_txt = info.strip().split('|')
if username == dic['username']:
'''用户存在,就对客户端发来的用户的密码再次加密,与文件中对比'''
md5_obj = hashlib.md5(sor)
md5_obj.update(dic['password'].encode('utf-8'))
pawd = md5_obj.hexdigest()
if pawd_txt == pawd:
dic['status'] = True
else:
dic['reason'] = '密码错误'
break
else:
dic['reason'] = '用户不存在'
zhuce()
str_dic = json.dumps(dic)
self.request.send(str_dic.encode('utf-8'))
else:
'''已经是登录成功了'''
server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MySocket)
server.serve_forever()
客户端
import socket
import hashlib
import json
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
dic = {'status':False,'username':None,'password':None}
c = 3
while c:
username = input('请输入用户名')
password = input('请输入密码')
md5_obj = hashlib.md5(password.encode('utf-8'))
md5_obj.update(username.encode('utf-8'))
pawd_m = md5_obj.hexdigest()
dic['username'] = username
dic['password'] = pawd_m
str_dic = json.dumps(dic)
sk.send(str_dic.encode('utf-8'))
# 服务器应该回复我一个这样的字典:
# 是否登录成功,如果没有登录成功是因为什么原因?
res_dic = sk.recv(1024).decode('utf-8')# str_dic
result = json.loads(res_dic)# dic = {status:False/True , username , password, reason}
if result['status']:
print('登录成功')
break
else:
print('失败,%s'%result['reason'])
c -= 1
sk.close()
进度条
import time
# 1024*15 / 1500000
for i in range(51):
time.sleep(0.12)
print('\r'+ (i//2)*"■" + '>' + str(i*2) + '%',end='')