'''服务器端'''
1 _author__ = "Dbass"
import socketserver
import json,os
class MyTCPHandler(socketserver.BaseRequestHandler):
def get(self,*args):
'''发送客户端请求的文件'''
cmd_dic= args[0]
filename=cmd_dic["filename"]
self.request.send(b"200 ok")
if os.path.isfile(filename):
filesize = str(os.stat(filename).st_size)
print(type(filesize))
self.request.send(filesize.encode("utf-8"))
self.request.send(b"size ok")
f = open(filename, "rb")
for line in f:
self.request.send(line)
else:
print(filename, "is not exist") def put(self,*args):
'''接收客户端文件'''
cmd_dic = args[0]
filename = cmd_dic["filename"]
filesize = cmd_dic["size"]
if os.path.isfile(filename):
f = open(filename + ".new","wb")
else:
f = open(filename , "wb") self.request.send(b"200 ok")
received_size = 0
while received_size < filesize:
data = self.request.recv(1024)
f.write(data)
received_size += len(data)
else:
print("file [%s] has uploaded..." % filename) def handle(self):
while True:
try:
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
cmd_dic = json.loads(self.data.decode())
action = cmd_dic["action"]
if hasattr(self,action):
func = getattr(self,action)
func(cmd_dic) except ConnectionResetError as e:
print("err",e)
break
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# Create the server, binding to localhost on port 9999
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
 '''客户端'''
1 _author__ = "Dbass"
import socket
import json
import os
#client.connect(('192.168.16.200',9999))
class FtpClient(object):
def __init__(self):
self.client = socket.socket()
def help(self):
msg = '''
ls
pwd
cd ../..
get filename
put filename
'''
print(msg)
def connect(self,ip,port):
self.client.connect((ip, port))
def interactive(self):
#self.authenticate()
while True:
cmd = input(">>").strip()
if len(cmd) ==0:continue
cmd_str = cmd.split()[0]
if hasattr(self,"cmd_%s" % cmd_str):
func = getattr(self,"cmd_%s" % cmd_str)
func(cmd)
else:
self.help()
def cmd_put(self,*args):
cmd_split = args[0].split()
if len(cmd_split) >1:
filename = cmd_split[1]
if os.path.isfile(filename):
filesize = os.stat(filename).st_size
msg_dic = {
"action": "put",
"filename":filename,
"size": filesize,
"overridden":True
}
self.client.send( json.dumps(msg_dic).encode("utf-8") )
print("send", json.dumps(msg_dic).encode("utf-8"))
# 防止粘包,等服务器确认
server_response = self.client.recv(1024)
f = open(filename,"rb")
for line in f:
self.client.send(line)
else:
print("file upload success...")
f.close()
else:
print(filename,"is not exist")
def cmd_get(self,*args):
'''get IMG_6245.jpg'''
cmd_split=args[0].split()
if len(cmd_split) >1:
filename=cmd_split[1]
if os.path.isfile(filename):
print("filename has lived")
else:
msg_dic = {
"action": "get",
"filename": filename,
"overridden": True
}
self.client.send(json.dumps(msg_dic).encode("utf-8"))
print("send", json.dumps(msg_dic).encode("utf-8"))
server_response = self.client.recv(1024)# 防止粘包,等服务器确认
print(server_response)
filesize = int(self.client.recv(1024).decode())
print(filesize)
server_response2 = self.client.recv(1024)# 防止粘包,等服务器确认
print(server_response2)
received_size = 0
f = open(filename, "wb")
while received_size < filesize:
data = self.client.recv(1024)
f.write(data)
received_size += len(data)
else:
print("file [%s] has uploaded..." % filename) ftp = FtpClient()
ftp.connect("localhost",9999)
ftp.interactive()

最新文章

  1. Xcode 8 日志输出乱码问题
  2. C++ | boost库 类的序列化
  3. [MongoDB]Mongodb攻略
  4. RDoc
  5. 输入参数varargin
  6. css链接,列表,表格
  7. nodejs简单数据迁移demo
  8. Spring中用了哪些设计模式
  9. db2 常见错误以及解决方案[ErrorCode SQLState]
  10. SpringMVC项目容易出现的BUG
  11. c# Point不能输入小数
  12. P3292 [SCOI2016]幸运数字 线性基
  13. 熟悉SQL Server 数据类型
  14. c# usercontrol 用户自定义控件无法显示在工具箱的解决办法
  15. c# winform as3相互调用
  16. Spring Security基本配置
  17. 第二次spring冲刺第2天
  18. 关于面试总结8-http协议相关面试题
  19. 润乾报表如何使用Echarts
  20. JavaScript事件冒泡机制和阻止事件冒泡及默认事件

热门文章

  1. 报错:APP has stopped
  2. 变邻域搜索(Variable neighborhood search)
  3. SSM商城开发学习
  4. charles修改接口返回值
  5. ROS零门槛学渣教程系列前言
  6. Tornado创建一个web服务
  7. windows server 2012 FTP连接报530 User 用户名 cannot log in home directory inaccessible的解决方法
  8. Android学习(四)
  9. sqlserv 配置 CLR
  10. Intellij IDEA环境配置RestEasy,SpringMVC+RestEasy