python文件拷贝并校验_初级版python登录验证,上传下载文件加MD5文件校验

importosimportjsonimportsocketimportstructimporthashlib#import time

deflogin():

usr= input('请输入用户名:')

pwd= input('请输入密码:')

usr_info_dic= {'username': usr, 'password': pwd, 'operate': 'login'}

usr_info=json.dumps(usr_info_dic).encode()

client.send(usr_info)

ret= client.recv(1024).decode()

flag_dic=json.loads(ret)if flag_dic['flag']:print('登录成功')return {'flag': 1}else:print('登录失败')return {'flag': 0}defupload():#F:\test.mp4

file_path = input('请输入文件路径:')

file_size=os.path.getsize(file_path)

file_name=os.path.basename(file_path)

file_info= {'filesize': file_size, 'filename': file_name, 'operate': 'upload'}

file_dic=json.dumps(file_info).encode()

file_len= struct.pack('i', len(file_dic))#发送文件信息

client.send(file_len)

client.send(file_dic)

total_size=file_size#打开文件准备上传文件

md5_data =hashlib.md5()

f1= open(file_path, 'rb')whilefile_size:

content= f1.read(2048*10)

md5_data.update(content)

file_size-=len(content)

client.send(content)print('\r已上传%s%%' % int((1 - file_size / total_size) * 100), end='')print('上传成功!')

f1.close()

md5sum=md5_data.hexdigest()print(md5sum)#time.sleep(0.1)

client.send(md5sum.encode())return {'flag': 1}defdownload():#F:\test.mp4

file_name = input('请输入文件名:')

file_info= {'filename': file_name, 'operate': 'download'}

file_dic=json.dumps(file_info).encode()

file_len= struct.pack('i', len(file_dic))## 发送文件信息

client.send(file_len)

client.send(file_dic)

dic_len= client.recv(4)

dic_size= struct.unpack('i', dic_len)[0]

dfile_info=json.loads(client.recv(dic_size))

md5_data=hashlib.md5()for dir_index, dir_name in enumerate(dfile_info['dir_list']):print(dir_index, dir_name)

total_size= dfile_info['filesize']

f1= open('down' + file_name, 'wb')while dfile_info['filesize'] >0:#在最后接收文件不足2048时接收精准字节,避免与后面发送的数据发生粘包

if 0 < dfile_info['filesize'] < 1204:

content= client.recv(dfile_info['filesize'])else:

content= client.recv(2048)

md5_data.update(content)

f1.write(content)

dfile_info['filesize'] -=len(content)print('\r已下载%s%%' % int((1-dfile_info['filesize'] / total_size) * 100), end='')

f1.close()

md5sum=md5_data.hexdigest()#print('\n', md5sum)

recv_md5= client.recv(32).decode()#print(recv_md5)

if md5sum ==recv_md5:print('校验成功')return {'flag': 1}else:print('校验失败')return {'flag': 0}#print('下载成功!')

#return {'flag': 1}

defchoose_cmd():print('''1.上传文件

2.下载文件

3.退出上传下载文件''')

cmd= input('请输入序号选择相应操作')

dic= {'cmd': cmd}

cmd_dic=json.dumps(dic).encode()

client.send(cmd_dic)returndic

client=socket.socket()#client.connect(('192.168.13.13', 8001))

client.connect(('127.0.0.1', 8001))

login_ret=login()if login_ret['flag']:while login_ret['flag']:

cmd_ret=choose_cmd()if cmd_ret['cmd'] == '1':

upload()elif cmd_ret['cmd'] == '2':

download()elif cmd_ret['cmd'] == '3':break

else:print('输入的序号有误')else:print('请重新登录')

client.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值