FTP_server

import json
import os
import socketserver


class MyHandle(socketserver.BaseRequestHandler):

def handle(self):
while True:
try:
print("等待接受数据")
self.data = self.request.recv(1024).strip()
if not self.data:
print(self.client_address[0],"断开连接")
break
cmd_dic = json.loads(self.data.decode())
other = cmd_dic["other"]
print("查找%s方法" % other)
if hasattr(self,other):
fun = getattr(self,other)
fun(cmd_dic)
except ConnectionResetError:
print(self.client_address[0],"断开连接。。")
break
def put(self,*args):
print("进入put")
cmd_dic = args[0]
filename = cmd_dic["filename"]
file = None
if os.path.isfile(filename):
file = open(filename + ".new","wb")
else:
file = open(filename,"wb")
filesize = cmd_dic["size"]
read_size = 0
self.request.send(b"1 reading")
while read_size < filesize:
data = self.request.recv(1024)
read_size += len(data)
file.write(data)
else:
print("接受完成")
file.close()
#更新日期 2018.5.25 未完待续.....
def get(self,*args):
cmd_dic = args[0]
filename = cmd_dic["filename"]
isfile = self.SeekFile(filename)
if isfile:
filesize = os.stat(filename).st_size
file = open(filename,"rb")
else:
filesize = -1
print("不存在该文件")
self.request.send( str(filesize).encode())
if filesize != -1:
self.request.recv(1024)
for line in file:
self.request.send(line)
else:
print("send flie done....")
file.close()

def SeekFile(self,filename):
if os.path.isfile(filename):
return True
else: return False

if __name__ == "__main__":
HOST,PORT = "localhost",9999
server = socketserver.ThreadingTCPServer((HOST,PORT),MyHandle)
server.serve_forever()
posted @ 2018-05-23 14:19  Angle_dd  阅读(82)  评论(0编辑  收藏  举报