"""
client.py
"""
import socket
import os,sys
import time
# 服务器地址
ADDR = ("127.0.0.1",8686)
FILE_PATH = "./clientFiles/"
# 客户端功能类
class Client(object):
def __init__(self,account):
self.sockfd = ""
self.account = account
#获得服务器文件列表
def server_list(self):
ftpServerFiles = []
self.sockfd.send((self.account+' LIST@# ').encode())
# 等待回复
data = self.sockfd.recv(128).decode()
if data == "OK":
files = self.sockfd.recv(4096).decode()
for file in files.split('#'):
#print(file)
ftpServerFiles.append(file)
else:
# 无法完成操作
print(data)
ftpServerFiles = ftpServerFiles[:-1]
return ftpServerFiles
#获得用户文件夹列表
def client_list(self):
# 获取文件列表
userFiles = []
file_list = os.listdir(FILE_PATH+self.account+"/")
if not file_list:
return
else:
time.sleep(0.1)
files = ""
for file in file_list:
if file[0] != '.' and os.path.isfile(FILE_PATH + self.account + "/" + file):
userFiles.append(file)
return userFiles
#退出
def do_quit(self):
self.sockfd.send((self.account+' QUIT@# ').encode())
self.sockfd.close()
sys.exit('谢谢使用')
#用户下载服务器文件
def do_get(self,filename):
self.sockfd.send((self.account+' GET@# '+filename).encode())
data = self.sockfd.recv(128).decode()
if data == 'OK':
fd = open(FILE_PATH + self.account + "/" + filename,'wb')
#复写
while True:
data = self.sockfd.recv(1024)
if data == b'##':
#print("##")
break
#print("正在写入数据")
fd.write(data)
fd.close()
else:
print(data)
#用户将文件上传到服务器文件夹
def do_put(self,filename):
try:
fd = open(FILE_PATH + self.account + "/" + filename,'rb')
except IOError:
print("文件不存在")
return
# 获取文件名
filename = filename.split('/')[-1]
# else:
self.sockfd.send((self.account+' PUT@# '+filename).encode())
data = self.sockfd.recv(128).decode()
# 发送文件
if data == 'OK':
while True:
data = fd.read(1024)
if not data:
time.sleep(0.1)
self.sockfd.send(b'**')
break
self.sockfd.send(data)
fd.close()
return "true"
else:
print(data)
return "false"
#删除用户文件
def removeU(self,fileName):
os.remove(FILE_PATH + self.account + "/" + fileName)
return "true"
#删除用户文件
def removeF(self,fileName):
self.sockfd.send((self.account+' delete@# '+fileName).encode())
# 等待回复
data = self.sockfd.recv(128).decode()
if data == "OK":
return "true"
def menu_display(self):
print("\n------命令选择-------")
print("*** clist ***")
print("*** slist ***")
print("*** get list ***")
print("*** put list ***")
print("*** quit ***")
print("----------------------")
def run(self,cmd):
# 创建套接字
sockfd = socket.socket()
try:
sockfd.connect(ADDR)
except Exception as e:
print(e)
return
result = ""
self.sockfd = sockfd
# choice(cmd,ftp)
if cmd == "slist":
result = self.server_list()
return result
elif cmd == "clist":
result = self.client_list()
return result
elif cmd =='quit':
self.do_quit()
elif cmd[:3] == 'get':
filename = cmd.strip().split(' ')[-1]
self.do_get(filename)
elif cmd[:3] == 'put':
filename = cmd.strip().split(' ')[-1]
result = self.do_put(filename)
return result
elif cmd[:7] == 'removeU':
filename = cmd.strip().split(' ')[-1]
self.removeU(filename)
elif cmd[:7] == 'removeF':
filename = cmd.strip().split(' ')[-1]
self.removeF(filename)
else:
print("请输入正确命令!")
if __name__ == "__main__":
client = Client("ffy")
client.run()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
文件传输系统,基于ftp协议,使用python语言开发,虽然python里面已经有ftplib模块,可以很容易的实现ftp服务器。这次我使用的是socket实现client与ftp server之间的通讯和文件传输,client另起一个flask服务器,用于用户在浏览器端的交互。系统实现的功能有:用户登录注册,用户查看ftp服务器端文件和下载上传删除操作,支持多进程、多用户。 配合博客,使用更佳:https://blog.csdn.net/qq_37437983/article/details/104701344
资源推荐
资源详情
资源评论
收起资源包目录
ftpTrans(python).zip (19个子文件)
ftpTrans
register.html 2KB
main.html 1KB
clientFiles
.idea
workspace.xml 28KB
misc.xml 244B
modules.xml 256B
encodings.xml 196B
server.py 4KB
core
server.py 4KB
client.py 5KB
__pycache__
server.cpython-36.pyc 3KB
client.cpython-36.pyc 4KB
test.py 42B
index.html 2KB
serverFiles
static
image
js
main.js 4KB
register.js 1KB
index.js 1KB
jquery.js 389KB
css
util
DBManager.py 1KB
__pycache__
DBManager.cpython-36.pyc 1KB
共 19 条
- 1
我要出家当道士
- 粉丝: 9805
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页