python网盘系统开发_python——网盘系统

sever端

#Author:YuSong

import os

import sys

import json

import hashlib

import struct

import socketserver

class Mysever(socketserver.BaseRequestHandler):

path1 = r'C:\Users\86178\Desktop\考研辅导'

@staticmethod

def sha(username): #加密

key = hashlib.sha1('淞哥专用'.encode('utf-8'))

key.update(username.encode('utf-8'))

return key.hexdigest()

@classmethod

def show_file(cls, path1): # 显示文件夹中的文件

l = []

if os.path.isdir(path1):

name_list = os.listdir(path1)

for i in name_list:

abs_path = os.path.join(path1, i)

if os.path.isfile(abs_path):

l.append(abs_path)

elif os.path.isdir(abs_path):

cls.show_file(abs_path)

else:

l.append(path1)

return l

@staticmethod

def send(conn, info): # 发送

info_len = struct.pack('i', len(info.encode('utf-8')))

conn.send(info_len)

conn.send(info.encode('utf-8'))

@staticmethod

def recv(conn): # 接收

msg_len = conn.recv(4)

length = struct.unpack('i', msg_len)

msg = conn.recv(length[0]).decode('utf-8')

return msg

@classmethod

def download(cls,conn): # 下载

ret = cls.show_file(cls.path1)

ret = json.dumps(ret)

cls.send(conn, ret)

msg_len = conn.recv(4)

length = struct.unpack('i', msg_len)

msg = conn.recv(length[0]).decode('utf-8')

msg = json.loads(msg)

with open(msg['filename'], mode='rb') as f:

while msg['filesize'] > 0:

content = f.read(1024)

msg['filesize'] -= 1024

conn.send(content)

@staticmethod

def upload(conn): # 上传

msg_len = conn.recv(4)

length = struct.unpack('i', msg_len)

msg = conn.recv(length[0]).decode('utf-8')

msg = json.loads(msg)

with open(os.path.basename(msg['filename']), mode='wb') as f1:

while msg['filesize'] > 0:

content = conn.recv(1024)

msg['filesize'] -= len(content)

f1.write(content)

def handle(self): #主程序

conn=self.request

while 1:

flag1=True

while flag1:

info='欢迎登录系统'

Mysever.send(conn,info)

msg=Mysever.recv(conn)

ret = Mysever.sha(msg)

with open('login', encoding='utf-8', mode='r') as f:

for line in f:

if ret == line.strip():

ret,flag1=True,False

break

else:

flag1,ret=False,False

flag = {'operate': 'login', 'state': ret}

flag = json.dumps(flag)

Mysever.send(conn,flag)

flag4=True #退出标志

while flag4:

msg1=Mysever.recv(conn)

if hasattr(self, msg1):

getattr(self, msg1)(conn)

else:

flag4=False

conn.close()

sever=socketserver.ThreadingTCPServer(('127.0.0.1',9001),Mysever)

sever.serve_forever()

client端

#Author:YuSong

import os

import sys

import json

import hashlib

import socket

import struct

sk=socket.socket()

sk.connect(('127.0.0.1',9001))

def MD5(username,password): #加密

md5=hashlib.md5(username.encode('utf-8'))

md5.update(password.encode('utf-8'))

return md5.hexdigest()

def standard(path): #常规操作

filename=os.path.basename(path)

filesize = os.path.getsize(path)

dic1 = {'filename': path, 'filesize': filesize}

str_dic1 = json.dumps(dic1).encode('utf-8')

dic1_len = struct.pack('i', len(str_dic1))

sk.send(dic1_len)

sk.send(str_dic1)

return filename,dic1

def download(sk,path1): #下载

filename,dic1=standard(path1)

with open(filename,mode='wb') as f1:

while dic1['filesize']>0:

content=sk.recv(1024)

dic1['filesize']-=len(content)

f1.write(content)

def upload(sk,path1): #上传

ret = show_file(path1)

for index, a in enumerate(ret, 1):

print(index, os.path.basename(a))

num1 = int(input('>>>>>'))

path=ret[num1 - 1]

filename,dic1 =standard(path)

with open(path,mode='rb') as f:

while dic1['filesize']>0:

content=f.read(1024)

dic1['filesize']-=1024

sk.send(content)

def show_file(path1): #显示文件夹

l = []

if os.path.isdir(path1):

name_list=os.listdir(path1)

for i in name_list:

abs_path=os.path.join(path1,i)

if os.path.isfile(abs_path):

l.append(abs_path)

elif os.path.isdir(abs_path):

show_file(abs_path)

else:

l.append(path1)

return l

def send(sk,ret): #发送

ret=ret.encode('utf-8')

ret_len = struct.pack('i', len(ret))

sk.send(ret_len)

sk.send(ret)

def recv(sk): #接收

msg_len = sk.recv(4)

length = struct.unpack('i', msg_len)

msg = sk.recv(length[0]).decode('utf-8')

return msg

def func():

flag3=True

while flag3:

msg=recv(sk)

if msg=='欢迎登录系统':

print('\033[33m %s \033[0m'%msg)

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

psd=input('请输入您的密码:')

ret=MD5(usr,psd)

send(sk,ret)

else:

msg=json.loads(msg)

while msg['state']:

opt_lst=[('上传','upload'),('下载','download')]

for index,(a,b) in enumerate(opt_lst,1):

print(index,a)

num=input('>>>>>')

if num.isdecimal():

num=int(num)

if 0

if hasattr(sys.modules[__name__],opt_lst[num-1][1]):

send(sk, opt_lst[num - 1][1])

if opt_lst[num-1][1]=='upload':

path1=input('请输入你想要上传的文件的地址:')

else:

lst=recv(sk)

lst=json.loads(lst)

for index,a in enumerate(lst, 1):

print(index, os.path.basename(a))

num1= int(input('>>>>>'))

path1= lst[num1 - 1]

getattr(sys.modules[__name__],opt_lst[num - 1][1])(sk,path1)

else:

print('请输入一个范围内的数!!!')

elif num.upper()=='Q': #退出键

msg['state']=False

send(sk,'False')

flag3=False

sk.close()

else:

print('请输入数字')

# path1=r'C:\Users\86178\Desktop'----->测试用

if __name__ == '__main__':

func()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值