服务器端
在服务器端,我们分为4个部分:bin(可执行),conf(配置),core(核心代码),home(存储每个用户的内部数据)
bin
这个包中放置了服务器端的运行文件ftp_server.py
其中配置base_dir
,保证所有模块中的导入包都可以运行
在其中,调用请求处理类
core
core里面有两个模块:
- server,处理客户端发来的各种请求
这个模块主要用来处理客户端发来的各种命令,
首先规定客户端和服务器端交互的单位为一个字典
字典的格式:包含命令及命令所需要的各种参数
# 向客户端返回数据,收到客户端发来的信息之后,返回一个执行码
def send_response(self, status_code, data=None):
'''向客户端返回数据'''
response = {'status_code': status_code, 'status_msg': STATUS_CODE[status_code]}
if data:
response.update(data)
self.request.send(json.dumps(response).encode())
- main , 启用服务器的各种参数
#命令行的各种参数处理我们使用opt_parse处理
self.op=optparse.OptionParser()
# op.add_option("-s","--host",dest="host",help="server IP address")
# op.add_option("-P","--port",dest="port",help="server port")
options,args=self.op.parse_args()
# print(options,args)
# print(options.host,options.port)
在__init__
函数里面,同时调用了验证参数和启动某一命令的函数
def verify_argv(self,options,args):
# 利用反射的方法,可以精简代码,调用名字为你所传参数的函数
if hasattr(self,args[0]):
func=getattr(self,args[0])
func()
else:
#self.op.print_help()
print("不存在这个函数")
def start(self):
print('server is working ....')
ser=socketserver.ThreadingTCPServer((settings.IP,settings.PORT),server.ServerHandler)
ser.serve_forever()
网友评论