python下载文档,python的下载方法
仅用于研究参考。
实用功能需求:使用python编写客户端和服务器读取和下载文件的功能。
客户端:请求要下载的文件名,然后根据返回的数据从服务器写一个文件。
服务器:根据要下载的客户端发送的文件名,返回文件的内容数据。
1.0版-客户端首先从网络调试器读取返回的数据,并生成文件客户端代码,如下所示:
[root @ server 01 TCP _ download]# vim client . py
#编码=utf-8
从套接字导入*
#创建套接字
tcp _客户端_套接字=套接字(AF_INET,SOCK_STREAM)
#服务器的地址
Dest _ addr=(192.168.1.2 ,8080) #注意是元组,ip是字符串,端口是数字。
#链接服务器进行tcp三次握手
tcp_client_socket.connect(目标地址)
#从键盘获取数据
Download_file_name=input(胖老板:要不要顶烟)
#向指定的服务器发送数据
TCP _ client _ socket . send(download _ file _ name . encode( utf-8 ))
#接收对方发来的数据,最大1024字节,1024=1k,1024 * 1024=1m,1024 * 1024 * 1024=1g。
recvData=TCP _ client _ socket . recv(1024)
print(server:,str(recvData.decode(utf-8 ))
#将接收到的数据保存到一个文件中, wb 将以字节为单位写入该文件。
用open( download _ download _ file _ name, wb )作为f:
f.write(recvData)
#关闭插座
Tcp_client_socket.close()执行如下:
如你所见,现在已经简单实现了客户端的功能,下面让我们来实现服务器的功能。
1.1版——客户端将文件名发送给服务器,服务器简单返回“兰利群一包”,然后客户端将内容写入文件。服务器的返回代码如下:
[root @ server 01 TCP _ download]# vim server . py
#编码=utf-8
从套接字导入*
#创建套接字
TCP _ server _ socket=socket(AF _ INET,SOCK_STREAM)
#由绑定服务器提供的服务的端口号
Local_addr=( ,7788) # ip地址和端口号。一般不需要写ip,就是说这个机器的任何ip。
#绑定
tcp_server_socket.bind(本地地址)
#使用socket创建的socket的默认属性是active,使用listen监听连接将其更改为passive。
tcp_server_socket.listen(128)
虽然正确:
#如果有一个新的客户端链接到服务器,那么将创建一个新的套接字来服务这个客户端。
# client_socket用于服务此客户端。
# tcp_server_socket可以被保存以等待其他新的客户端连接,而True:
client_socket,client addr=TCP _ server _ socket . accept()
#接收对方发送的数据
recv _ data=client _ socket . recv(1024)# 1024表示本次接收的最大字节数。
如果接收数据:
Print(接收的数据是:,recv_data.decode(utf-8 ))
#向客户端发送一些数据
client_socket.send(你的兰利群!。编码( utf-8 ))
#将接收到的数据转换成字符串并打印出来
recv _ result=str(recv _ data . decode( utf-8 ))
打印(接收结果,接收结果)
#关闭服务于此客户端的套接字。只要关闭了,就意味着不能再服务这个客户了。
#如果客户端仍然需要服务,请重新建立连接。
client _套接字. close()
# # #最后,关闭监听套接字。
Tcp_server_socket.close()执行如下:
好吧,就这样。我看到客户端已经将服务器返回的文件内容全部写入文件中。
它还简单地实现了服务器的功能。
然后下一步就是要求服务器根据请求的文件名读取内容,然后将文件内容返回给客户端。
版本2.0-服务器读取文件的内容,并返回客户端首先准备要下载的文件:
[root @ server 01 TCP _ download]# echo 123 1 . txt
[root@server01 tcp_download]# ls
1.txt client.py下载_兰利群服务器. py
[root @ server 01 TCP _下载]#
[root @ server 01 TCP _ download]# cat 1 . txt
123
[root@server01 tcp_download]#会有客户端请求下载1.txt文件,然后服务器会返回1.txt的文件内容提供给客户端下载。
服务器代码如下:
[root @ server 01 TCP _ download]# vim server . py
#编码=utf-8
从套接字导入*
def发送文件2客户端(客户端套接字,客户端地址):
#接收需要从客户端下载的文件名
recv _ data=client _ socket . recv(1024)# 1024表示本次接收的最大字节数。
如果接收数据:
file _ name=recv _ data . decode( utf-8 )
打印(需要下载文件名=%s %文件名
打印(客户端IP:,clientAddr)
#根据文件名读取文件数据,返回文件内容。
文件内容=无
#打开文件
尝试:
f=打开(文件名, rb )
file_content=f.read()
f.close()
除了ret例外:
打印(没有下载文件%s %文件名)
#将打开文件的内容发送给客户端
如果文件内容:
#client_socket.send(你的兰利群!。编码( utf-8 ))
客户端套接字发送(文件内容)
def main():
#创建套接字
TCP _ server _ socket=socket(AF _ INET,SOCK_STREAM)
#由绑定服务器提供的服务的端口号
Local_addr=( ,7788) # ip地址和端口号。一般不需要写ip,就是说这个机器的任何ip。
#绑定
tcp_server_socket.bind(本地地址)
#使用socket创建的socket的默认属性是active,使用listen监听连接将其更改为passive。
TCP _ server _ socket . listen(128)# 128服务器可以同时监听128个客户端是可以理解的。
虽然正确:
#如果有一个新的客户端链接到服务器,那么将创建一个新的套接字来服务这个客户端。
# client_socket用于服务此客户端。
# tcp_server_socket可以被保存以等待其他新的客户端连接,而True:
client_socket,client addr=TCP _ server _ socket . accept()
#读取文件内容并将其发送给客户端
发送文件2客户端(客户端套接字,客户端地址)
#关闭服务于此客户端的套接字。只要关闭了,就意味着不能再服务这个客户了。
#如果客户端仍然需要服务,请重新建立连接。
client _套接字. close()
# #最后,关闭监听插座
tcp_server_socket.close()
if __name__==__main__ :
main()演示执行如下:
从演示中可以看出,客户端存在bug。当服务器返回一个空字符串时,客户端仍然会将一个空内容写入文件。
那就在下面改一下,补充一个判断。
客户端代码如下:
[root @ server 01 TCP _ download]# vim client . py
#编码=utf-8
从套接字导入*
#创建套接字
tcp _客户端_套接字=套接字(AF_INET,SOCK_STREAM)
#服务器的地址
Dest_addr=(127.0.0.1 ,7788) #注意是元组,ip是字符串,端口是数字。
#链接服务器进行tcp三次握手
tcp_client_socket.connect(目标地址)
#从键盘获取数据
Download_file_name=input(胖老板:要不要顶烟)
#向指定的服务器发送数据
TCP _ client _ socket . send(download _ file _ name . encode( utf-8 ))
#接收对方发来的数据,最大1024字节,1024=1k,1024 * 1024=1m,1024 * 1024 * 1024=1g。
recvData=TCP _ client _ socket . recv(1024)
print(server:,str(recvData.decode(utf-8 ))
#当服务器返回数据时,它将被写入文件。
如果接收数据:
#将接收到的数据保存到一个文件中, wb 将以字节为单位写入该文件。
用open( download _ download _ file _ name, wb )作为f:
f.write(recvData)
#关闭插座
Tcp_client_socket.close()执行如下演示:
关注微信微信官方账号,回复【数据】,Python,PHP,JAVA,web,即可获取Python,PHP,JAVA,前端等视频数据。
来自海洋的渔夫原创作品,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。