def handle(self): print(f"主机{self.client_address}连接成功,欢迎使用FTP服务器。。。") while 1: try: msg = "请问你需要上传还是下载." # 发数据 common.common_tcp_send_data_interface(self.request, msg) # 收数据 client_request = common.common_tcp_recv_data_interface( self.request) print(msg) # 根据请求进行判断 if client_request == "下载": # 发文件给客户机 server_fip_interface.Server_download_interface( self.request) elif client_request == "上传": # 接收文件到服务器 server_fip_interface.Server_Upload_interface(self.request) else: # 客户端输入错误,直接重新开始 continue # common.common_tcp_send_data_interface(self.request,"输入错误") except: print("与客户机连接中断。。。\n") break
def Server_Upload_interface(conn): # 接收需要上传的文件名 file_name = common.common_tcp_recv_data_interface(conn) # 接收文件,如果不成功则收到一段话 flag = common.common_tcp_recv_data_interface( conn, file_name=file_name, recv_dir=settings.SERVER_FILE_DIR) if not isinstance(flag, str): print(f"客户机成功上传 {file_name}") common.common_tcp_send_data_interface(conn, f"{file_name} 上传成功") return True else: common.common_tcp_send_data_interface(conn, f"{file_name} 上传失败") return False
def Client_Upload_interface(soc): print("目录文件:", os.listdir(settings.CLIENT_FILE_DIR)) # 输入下载文件名 file_name = input("请输入需要上传的文件") flag = common.common_tcp_send_data_interface(soc, file_name) if not flag: return False # 上传文件(文件名,接收目录) flag = common.common_tcp_send_data_interface( soc, file_name=file_name, send_dir=settings.CLIENT_FILE_DIR) if flag: # 成功上传,接收消息 msg = common.common_tcp_recv_data_interface(soc) print(msg) return True else: # 发送错误信息 common.common_tcp_send_data_interface(soc, "输入错误,文件不存在") msg = common.common_tcp_recv_data_interface(soc) print(msg) return False
def Client_download_interface(soc): # 先拿可下载的内容信息 msg = common.common_tcp_recv_data_interface(soc) print(msg) # 输入下载文件名 file_name = input("请输入需要下载的文件") flag = common.common_tcp_send_data_interface(soc, file_name) if not flag: return False # 接收文件(文件名,接收目录) flag = common.common_tcp_recv_data_interface( soc, file_name=file_name, recv_dir=settings.CLIENT_FILE_DIR) if not isinstance(flag, str): msg = common.common_tcp_recv_data_interface(soc) print(msg) return True else: # 上传失败 print(flag) return False
def run(): soc = socket.socket() soc.connect((settings.HOST, settings.PORT)) while 1: msg = common.common_tcp_recv_data_interface(soc) if not msg: print("出错了") break server_request = input(msg) flag = common.common_tcp_send_data_interface(soc, data=server_request) if not flag: print("出错了") break # 下载逻辑 if server_request == "下载": client_ftp_interface.Client_download_interface(soc) # 上传逻辑 elif server_request == "上传": client_ftp_interface.Client_Upload_interface(soc) # 错误逻辑 else: print("输入错误") # 输入错误直接重新开始
def Server_download_interface(conn): # 先告诉别人我FTP服务器中有哪些文件可被下载 file_list = os.listdir(settings.SERVER_FILE_DIR) resources_data = f"FTP服务器中文件:{file_list}" flag = common.common_tcp_send_data_interface(conn, resources_data) if not flag: return False # 拿到要下载的文件名 file_name = common.common_tcp_recv_data_interface(conn) if not file_name: return False # 发送给别人 msg = common.common_tcp_send_data_interface( conn, file_name=file_name, send_dir=settings.SERVER_FILE_DIR) if msg: print(f"客户机成功下载 {file_name}") common.common_tcp_send_data_interface(conn, f"{file_name} 下载成功") return True else: common.common_tcp_send_data_interface(conn, f"{file_name} 下载失败") return False