socket创建的文件下载器
客户端:
# tcp_downloadfile_client.py import socket import sys def main(): # 创建套接字 tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 获取服务器的ip port dest_ip = input('请输入要链接的服务器:') dest_port = int(input('请输入要链接的服务器的端口:')) dest_addr = (dest_ip,dest_port) # 链接到服务器 tcp_client_socket.connect(dest_addr) print('——链接成功——') # 获取下载的文件名字 filename_download = input('请输入要下载的文件名字:') # 将文件名字发送到服务器 tcp_client_socket.send(filename_download.encode('utf-8')) # 接收文件中的数据 recv_data = tcp_client_socket.recv(1024) # 保存接受到的数据到一个文件中 if recv_data: with open('download'+filename_download,'wb') as f: f.write(recv_data) print('下载完成') else: print('返回为空,请重新输入文件名') # 关闭套接字 tcp_client_socket.close() if __name__=='__main__': main()
服务器端:
# tcp_downloadfile_server.py import socket def send_file_to_client(new_client_socket,client_addr): # 接受客户端发送过来的要下载的文件名 recv_file_data = new_client_socket.recv(1024).decode('utf-8') if recv_file_data: print('客户端{}要下载的文件是:{}'.format(client_addr,recv_file_data)) print('下载中,请稍等') file_content = None # 打开这个文件,读取数据 try: f = open(recv_file_data,'rb') file_content = f.read() except Exception as ret: print('服务器未存储客户要下载的文件{}'.format(recv_file_data)) # 发送数据给客户端消息 if file_content: new_client_socket.send(file_content) else: return file_content else: print("***欢迎再次访问***") def main(): # 创建套接字 tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 绑定本地ip和port localaddr = ('',8080) tcp_server_socket.bind(localaddr) # 监听 tcp_server_socket.listen(128) while True: print('————等待用户提交下载请求————') # 等带客户端并分配套接字 new_client_socket,client_addr = tcp_server_socket.accept() print('——用户链接成功——') print('——正在等待用户输入查找文件——') # 调用发送文件函数,完成为客户端服务 send_file_to_client(new_client_socket,client_addr) # 关闭套接字 print('——完成服务——') print() new_client_socket.close() tcp_server_socket.close() if __name__=='__main__': main()