#更新日期 2018.5.25 未完待续....
import json
import os
import socket
class FTPClient:
def __init__(self,host,port):
self.client = socket.socket()
self.client.connect((host,port))
self.path = "home >>"
def ActionConnect(self):
while True:
msg = input(self.path).strip()
if not msg:continue
cmd = msg.split()[0]
print("查找%s方法" % cmd)
if hasattr(self,cmd):
fun = getattr(self,cmd)
print("调用%s方法" % cmd)
fun(msg)
def cd(self):
pass
def mkdir(self):
pass
def ls(self):
pass
def help(self):
pass
def put(self,*args):
cmd = args[0].strip().split()
filename = cmd[1]
if os.path.isfile(filename):
filesize = os.stat(filename).st_size
cmd_dir = {
"other":cmd[0],
"filename":filename,
"size":filesize
}
self.client.send( json.dumps(cmd_dir).encode())
#防止粘包 等待服务器端确认收到了数据
data = self.client.recv(1024)
outcome = int(data.decode().strip().split()[0])
#TODO 调用返回结果函数来判断是否可以发送
file = open(filename,"rb")
for line in file:
self.client.send(line)
else:
print("发送完毕!")
file.close()
else:
print("%s不存在该文件" % filename)
def get(self,*args):
cmd = args[0].strip().split()
filename = cmd[1]
cmd_dic = {
"other":cmd[0],
"filename":filename
}
self.client.send( json.dumps(cmd_dic).encode())
fileseize = int(self.client.recv(1024).strip())
if fileseize != -1:
if os.path.isfile(filename):
file = open(filename + ".new", "wb")
pass
else:
file = open(filename, "wb")
self.client.send(b"this ok")
read_size = 0
while read_size < fileseize:
data = self.client.recv(1024)
read_size += len(data)
file.write(data)
else:
print("接受完成")
if __name__ == "__main__":
client = FTPClient("localhost",9999)
client.ActionConnect()
转载于:https://www.cnblogs.com/angle90/p/FTP_socket.html