文件下载器客户端
import socket def main(): # 1.创建一个tcp socket tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2. 连接服务端 tcp_client_socket.connect(('127.0.0.1',9999)) #3. 获取用户输入的文件名 file_name=input("请输入要下载的文件名:") # 4. 把要下载的文件名发给服务端 tcp_client_socket.send(file_name.encode()) #5. 等待接收服务端回传的文件内容 recv_data=tcp_client_socket.recv(1024*1024) # 一次最多接收1M字节 print(recv_data) #6. 假如内容不为空,则写入到文件中 if recv_data: with open("/home/python/Desktop/"+file_name,"wb") as f: f.write(recv_data) #7. 关闭tcp socket tcp_client_socket.close() if __name__ == '__main__': main()
文件下载器服务端
import socket def get_file_content(file_name): """通过文件名取得文件内容""" try: # 打开文件,读取数据 www.png file=open(file_name,"rb") content=file.read() file.close() return content except: print("%s下载的文件找不到"%file_name) def main(): # 1. 创建服务端的socket,用来做监听的 server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 复用端口 server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) # 2. 绑定端口 server_socket.bind(('',9999)) # 3. 开启监听 listen server_socket.listen(5) # 4. 循环接收客户端的下载请求 while True: new_sock,client_addr=server_socket.accept() print("有新的下载请求,来自-->",client_addr) #5. 获取客户端发送过来的要下载的文件名 recv_data=new_sock.recv(1024) # 取得要下载的文件名 # 把字节串转为字符串 file_name=recv_data.decode() # 6.通过函数取得要下载的文件的内容 file_content=get_file_content(file_name) # 7. 把内容回传给客户端 if file_content: new_sock.send(file_content) # 8. 关闭与客户端对接的socket new_sock.close() #9. 关闭服务端server_socket,不再接收新的下载文件的请求 server_socket.close() if __name__ == '__main__': main()