码迷,mamicode.com
首页 > 其他好文 > 详细

史上最简单的ftp下载服务器

时间:2017-08-24 12:30:02      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:curd   end   recv   cep   code   ogre   ftp   lease   sock   

服务端:

 1 # encoding:utf-8
 2 # Author:"richie"
 3 # Date:8/23/2017
 4 
 5 from socket import *
 6 import pickle
 7 import os
 8 
 9 server=(127.0.0.1,17001)
10 root_path= os.path.abspath(os.curdir) # The absolute path of the current folder
11 sock = socket(AF_INET, SOCK_STREAM)
12 sock.bind(server)
13 sock.listen(5)
14 print(Wait for the client connection!!!)
15 while True: # Link cycle
16     conn, addr = sock.accept() #Waiting for client connection
17     print(Connect by,addr)
18     while True:    # Communication cycle
19         try:
20             data = conn.recv(1024) # Receive client data
21             if not data: break
22             filename = data.decode(utf-8) # Bytes -> String
23             file_path = os.path.join(root_path,filename) # join path
24             # get file size if file not existed file size is zero
25             file_size = os.path.getsize(file_path) if os.path.exists(file_path) else 0
26             header = pickle.pack(q, file_size)  # pack header
27             conn.send(header)   # send header
28             if file_size:   #The file exists and size than 0
29                 with open(file_path,rb) as f:
30                     for line in f:
31                         conn.send(line)   # send line of file data
32             else:
33                 conn.send(b‘‘)
34         except ConnectionResetError as e:  # conn abnormal
35             break
36         except Exception as e:
37             print(e)
38     conn.close()

 

客户端

 1 # encoding:utf-8
 2 # Author:"richie"
 3 # Date:8/23/2017
 4 
 5 from socket import *
 6 import pickle,sys
 7 import os
 8 def progress(percent,width=250):
 9     if percent >= 100:
10         percent=100
11     show_str=([%%-%ds] %width) %(int(width * percent / 100) * "#") #字符串拼接的嵌套使用
12     print("\r%s %d%%" %(show_str, percent),end=‘‘,file=sys.stdout,flush=True)
13 
14 server=(127.0.0.1,17001)
15 sock = socket(AF_INET,SOCK_STREAM)
16 sock.connect(server)
17 root_path= os.path.abspath(os.curdir) # The absolute path of the current folder
18 
19 while True:
20     print(The current home path is +root_path)
21     filename = input(Please enter the path>>:).strip()
22     if not filename:continue
23     sock.send(filename.encode(utf-8))
24     header = sock.recv(8) # Receive the header
25     total_size = pickle.unpack(q,header)[0] # get header data
26     each_recv_size = 1024*8421
27     recv_size = 0
28     recv_data = b‘‘
29     down_filename = down_+filename
30     f = open(down_filename,wb)
31     while recv_size < total_size:
32         if total_size - recv_size < each_recv_size:
33             data = sock.recv(total_size - recv_size)
34         else:
35             data = sock.recv(each_recv_size)
36         recv_size += len(data)
37         recv_percent = int(100 * (recv_size / total_size))  # Receive the percent
38         progress(recv_percent, width=30)  # The width of the progress bar is 30
39         f.write(data)
40     print()
41     f.close()

 

史上最简单的ftp下载服务器

标签:curd   end   recv   cep   code   ogre   ftp   lease   sock   

原文地址:http://www.cnblogs.com/richiewlq/p/7422213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!