Python实现客户端服务器代码示例:数据和文件处理
Python实现客户端服务器代码示例:数据和文件处理
这篇博客提供了一个使用Python编写的客户端-服务器应用程序的代码示例。提供的代码片段侧重于服务器端数据和文件处理操作,例如获取、保存、删除数据以及上传和下载文件。
服务器端代码示例(部分)
以下Python代码片段展示了服务器如何处理数据和文件请求:pythonimport osimport jsonimport uuidfrom os.path import join
... other code ...
def data_process(username, request_operation, json_data, connection_socket): ''' 数据处理 :param username: 用户名 :param request_operation: 请求操作 :param json_data: JSON格式的数据 :param connection_socket: 连接套接字 :return: None ''' global logger if request_operation == OP_GET: if FIELD_KEY not in json_data.keys(): logger.info(f'<-- 获取数据时缺少键值。') logger.error(f'<-- 数据获取操作缺少字段“key”。') connection_socket.send( make_response_packet(OP_GET, 410, TYPE_DATA, f'数据获取操作缺少字段“key”。', {})) return logger.info(f'--> 获取数据 {json_data[FIELD_KEY]}') if os.path.exists(join('data', username, json_data[FIELD_KEY])) is False: logger.error(f'<-- 键值 {json_data[FIELD_KEY]} 不存在。') connection_socket.send( make_response_packet(OP_GET, 404, TYPE_DATA, f'键值 {json_data[FIELD_KEY]} 不存在。', {})) return try: with open(join('data', username, json_data[FIELD_KEY]), 'r') as fid: data_from_file = json.load(fid) logger.info(f'<-- 找到数据并返回给客户端。') connection_socket.send( make_response_packet(OP_GET, 200, TYPE_DATA, 'OK', data_from_file)) except Exception as ex: logger.error(f'{str(ex)}@{ex.traceback.tb_lineno}')
if request_operation == OP_SAVE: key = str(uuid.uuid4()) if FIELD_KEY in json_data.keys(): key = json_data[FIELD_KEY] logger.info(f'--> 保存数据,键值为“{key}”') if os.path.exists(join('data', username, key)) is True: logger.error(f'<-- 键值“{key}”已存在。') connection_socket.send(make_response_packet(OP_SAVE, 402, TYPE_DATA, f'键值“{key}”已存在。', {})) return try: with open(join('data', username, key), 'w') as fid: json.dump(json_data, fid) logger.info(f'<-- 数据已保存,键值为“{key}”。') connection_socket.send( make_response_packet(OP_SAVE, 200, TYPE_DATA, f'数据已保存,键值为“{key}”。', {FIELD_KEY: key})) except Exception as ex: logger.error(f'{str(ex)}@{ex.__traceback__.tb_lineno}')
if request_operation == OP_DELETE: if FIELD_KEY not in json_data.keys(): logger.info(f'--> 尝试删除数据,但未提供任何键值。') logger.error(f'<-- 数据删除操作缺少字段“key”。') connection_socket.send( make_response_packet(OP_DELETE, 410, TYPE_DATA, f'数据删除操作缺少字段“key”。', {})) return if os.path.exists(join('data', username, json_data[FIELD_KEY])) is False: logger.error(f'<-- 键值“{json_data[FIELD_KEY]}”不存在。') connection_socket.send( make_response_packet(OP_DELETE, 404, TYPE_DATA, f'键值“{json_data[FIELD_KEY]}”不存在。', {})) return try: os.remove(join('data', username, json_data[FIELD_KEY])) logger.error(f'<-- 键值“{json_data[FIELD_KEY]}”已删除。') connection_socket.send( make_response_packet(OP_DELETE, 200, TYPE_DATA, f'键值“{json_data[FIELD_KEY]}”已删除。', {FIELD_KEY: json_data[FIELD_KEY]})) except Exception as ex: logger.error(f'{str(ex)}@{ex.__traceback__.tb_lineno}')
def file_process(username, request_operation, json_data, bin_data, connection_socket): ''' 文件处理 :param username: 用户名 :param request_operation: 请求操作 :param json_data: JSON格式的数据 :param bin_data: 二进制数据 :param connection_socket: 连接套接字 :return: ''' global logger if request_operation == OP_GET: if FIELD_KEY not in json_data.keys(): logger.info(f'--> 计划下载文件 {json_data[FIELD_KEY]}')
connection_socket.send( make_response_packet(OP_GET, 410, TYPE_FILE, f'数据获取操作缺少字段“key”。', {})) return logger.info(f'--> 计划下载文件,键值为“{json_data[FIELD_KEY]}”') if os.path.exists(join('file', username, json_data[FIELD_KEY])) is False and os.path.exists( join('tmp', username, json_data[FIELD_KEY])) is False: logger.error(f'<-- 键值 {json_data[FIELD_KEY]} 不存在。') connection_socket.send( make_response_packet(OP_GET, 404, TYPE_FILE, f'键值 {json_data[FIELD_KEY]} 不存在。', {})) return
# ... other code ...
原文地址: https://www.cveoy.top/t/topic/bfWn 著作权归作者所有。请勿转载和采集!