项目开发目录
FTPClient
bin文件夹 Client.py
import socket, os, sys
PATH = os.path.dirname(os.path.dirname(__file__))
sys.path.append(PATH)
class FTPclient():
def __init__(self):
from optparse import OptionParser
opt = OptionParser()
opt.add_option("-H", dest="HOST", help="FTP Server HOST")
opt.add_option("-P", dest="PORT", type="int", help="FTP Serve PORT")
values, args = opt.parse_args()
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect(values)
self.user = None
self.show = None
def connect(self, values):
HOST = values.HOST
PORT = values.PORT
if HOST and PORT:
self.client.connect((HOST, PORT))
print("connect succeed")
self.login()
else:
exit("ERROR: should supply HOST and PORT !")
def login(self):
count = 3
while count > 0:
username = input("please enter your username>>: ").strip()
password = input("enter your password>>: ").strip()
sql = "select password from user where username = %s"
from core import connect_database
cursor = connect_database.connect()
rows = cursor.execute(sql, (username))
if rows == 0:
count -= 1
print("用户名错误,请重新输入,您还有{}次机会重新输入".format(count))
elif rows != 0:
res = cursor.fetchall()[0].get("password")
if res != password:
count -= 1
print("密码错误,请重新输入,您还有{}次机会重新输入".format(count))
else:
print("登录成功")
self.user = username
from log import log
log.log(self.user, "login", self.user)
msg_dic = self.make_dict(action="log", username=username)
self.send_msg(msg_dic)
msg_dic = self.recv_msg()
self.show = msg_dic.get("show")
self.handle()
def make_dict(self, action,**kwargs)-> dict:
msg_dic = {
"action": action
}
msg_dic.update(**kwargs)
return msg_dic
def send_msg(self, msg_dic)->None:
import struct,json
str_msg = json.dumps(msg_dic)
length = struct.pack("q", len(str_msg))
self.client.send(length)
self.client.send(str_msg.encode("utf-8"))
def recv_msg(self)->dict:
length_dic = self.client.recv(8)
import struct,json
str_dic_length = struct.unpack("q", length_dic)[0]
str_dic = self.client.recv(str_dic_length)
dic = json.loads(str_dic)
return dic
def handle(self):
"""和服务端交互"""
while True:
cmd = input("{}>>: ".format(self.show)).strip()
cmd_list = cmd.split(" ")
if len(cmd_list) > 1:
action = cmd_list[0]
content = cmd_list[1]
else:
action = cmd_list[0]
content = ""
if hasattr(self, action):
func = getattr(self, action)
func(content)
def md(self, content):
"""在服务端家目录"""
msg_dic = self.make_dict(action="md", content=content)
self.send_msg(msg_dic=msg_dic)
recv_dic = self.recv_msg()
print(recv_dic.get("stdout"), recv_dic.get("stderr"))
from log import log
log.log(self.user, "md", content)
def dir(self, content):
"""查看服务端用户当前路径"""
msg_dic = self.make_dict(action="dir", content=content)
self.send_msg(msg_dic=msg_dic)
recv_dic = self.recv_msg()
print(recv_dic.get("stdout"), recv_dic.get("stderr"))
from log import log
log.log(self.user, "dir", content)
def cd(self, content