python123第七周作业_python作业简单FTP(第七周)

#!/usr/bin/env python#-*- coding:utf-8 -*-#Author: Colin Yao

importos, sysimportplatform, socketimporttime,hashlib,json

BASE_DIR= os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.append(BASE_DIR)#添加环境变量

from conf importsettingfrom core.commands importCommandsfrom conf importsetting#from src.server_class import Server_class

'''定义client连接的协议和方式后面需要补充'''

'''创建连接输入IP地址和密码'''

classFtp_client(object):deflink(self):try:

os.chdir(setting.file_object)#直接进入FTP指定的用户目录

self.sending_msg_list =[]

self.ip_addr= '127.0.0.1'self.ip_port= 62000self.client=socket.socket()

self.client.connect((self.ip_addr, self.ip_port))whileTrue:

self.sending_msg=None

self.data= self.client.recv(1024)print("[+]Server>>>recv: %s" %self.data.decode())

self.menu()

sending_msg= input('请输入命令>>>:')

self.sending_msg_list=sending_msg.split()if len(sending_msg) ==0:

data_header={'test1': {'action': '','file_name': '','size': 0

}

}

self.client.send(json.dumps(data_header).encode())elif len(sending_msg) >= 2:if setting.os_res == 'Windows':try:

new_path= self.sending_msg_list[1].encode('utf-8')

self.res_new= self.sending_msg_list[1].strip().split('\\') #截取获得文件名

self.file_name1 = self.res_new[-1]exceptIndexError:pass

elif setting.os_res == 'Linux':try:

self.res_new= self.sending_msg_list[1].strip().split('/')

self.file_name1= self.res_new[-1]exceptIndexError:pass

if self.sending_msg_list[0] == "put":try:

self.put(self.sending_msg_list[1])exceptIndexError:

self.client.send('put'.encode())if self.sending_msg_list[0] == "get":try:

self.get(self.file_name1)except IndexError andValueError:

self.client.send('get'.encode())elif self.sending_msg_list[0] == "exit":break

else:#cd ls rm drm mkdir 命令等

try:

data_header={'test1': {'action': self.sending_msg_list[0],'file_name': self.file_name1,'size': 0

}

}

self.client.send(json.dumps(data_header).encode())exceptAttributeError:

data_header={'test1': {'action': self.sending_msg_list[0],'file_name': '','size': 0

}

}

self.client.send(json.dumps(data_header).encode())except ConnectionResetError andConnectionAbortedError:print("[+]Server is Down ....Try to Reconnect......")

self.link()defget(self,file_name):

data_header={'test1': {'action': 'get','file_name': file_name,'size': 0

}

}#这里没做同名文件判断,下一次补充

self.client.send(json.dumps(data_header).encode()) #发送get请求

print(os.getcwd())

self.data= self.client.recv(1024) #拿到size

self.client.send(b'come on')

file_size=int(self.data.decode())deffile_tr():

file_object= open(file_name, 'wb')

received_size=0while received_size

recv_data= self.client.recv(1024)

file_object.write(recv_data)

received_size+= len(recv_data) #规定多少但不一定收到那么多

print(file_size, received_size)else:print('[+]Client:File Recv Successful')

file_object.close()if os.path.exists(file_name) == False: #判断本地目录文件是否存在

file_tr()else:print('文件已经存在将要覆盖')

file_tr()defput(self,file_name):if os.path.exists(file_name)== True: #判断文件路径# 是否存不存在

ifos.path.isfile(file_name):

file_obj= open(file_name, "rb")

data_header={'test1': {'action': 'put','file_name': self.file_name1,'size': os.path.getsize(self.sending_msg_list[1].encode())

}

}

self.client.send(json.dumps(data_header).encode())for line infile_obj:

self.client.send(line)

file_obj.close()print("[+]-----send file down-----")else:print('[+]file is no valid.')

self.client.send('cmd'.encode())else:print('[+] File Not Found')

data_header={'test1': {'action': 'aaaa','file_name': '','size': 0

}

}

self.client.send(json.dumps(data_header).encode())defmenu(self):

menu= ''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

帮 助 请注意windows和linux的路径稍有不同

查看文件 ls(file) eg: ls /tmp/Python3.6.3/README

进入目录 cd eg: cd /tmp/python

创建目录 mkdir(dir) eg: mkdir /tmp/python

删除文件 rm eg: rm /tmp/python/README

删除目录 drm eg: drm /tmp/python

上 传 put eg: put /tmp/python/README

下 载 get eg: get /tmp/python/README

登 出 exit

默认上传文件夹 用户目录下用用户名的命名的文件夹

默认下载文件夹 db/pub

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'''

print(menu)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值