python下载文档,python的下载方法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: