python实现简单的tcp 文件下载
什么是下载?
首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器收到一点数据,就写进这个文件中,再收到一点数据,再写入这个文件中,只要把所有的接收到的数据都写入到这个文件中,就完成了下载的操作。
所以下载需要2个部分。服务器的发送方和客户端的接收方。
我们这里不考虑复杂的情况。什么限速啊,验证啊,文件大小......只实现最简单的逻辑。
客户端参考代码
importsocket defmain(): #创建socket tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #目的信息 server_ip=input("请输入服务器ip:") server_port=int(input("请输入服务器port:")) #链接服务器 tcp_client_socket.connect((server_ip,server_port)) #输入需要下载的文件名 file_name=input("请输入要下载的文件名:") #发送文件下载请求 tcp_client_socket.send(file_name.encode("utf-8")) #接收对方发送过来的数据,最大接收1024个字节(1K) recv_data=tcp_client_socket.recv(1024) #如果接收到数据再创建文件,否则不创建 ifrecv_data: withopen("[接收]"+file_name,"wb")asf: f.write(recv_data) #关闭套接字 tcp_client_socket.close() if__name__=="__main__": main()
服务端参考代码
importsocket importsys defget_file_content(file_name): """获取文件的内容""" try: withopen(file_name,"rb")asf: content=f.read() returncontent except: print("没有下载的文件:%s"%file_name) defmain(): iflen(sys.argv)!=2: print("请按照如下方式运行:python3xxx.py7890") return else: #运行方式为python3xxx.py7890 port=int(sys.argv[1]) #创建socket tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #本地信息 address=('',port) #绑定本地信息 tcp_server_socket.bind(address) #将主动套接字变为被动套接字 tcp_server_socket.listen(128) whileTrue: #等待客户端的链接,即为这个客户端发送文件 client_socket,clientAddr=tcp_server_socket.accept() #接收对方发送过来的数据 recv_data=client_socket.recv(1024)#接收1024个字节 file_name=recv_data.decode("utf-8") print("对方请求下载的文件名为:%s"%file_name) file_content=get_file_content(file_name) #发送文件的数据给客户端 #因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码 iffile_content: client_socket.send(file_content) #关闭这个套接字 client_socket.close() #关闭监听套接字 tcp_server_socket.close() if__name__=="__main__": main()
以上就是python实现简单的tcp文件下载的详细内容,更多关于pythontcp下载的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。