python之ftp单线程模拟,client端

__author__ = 'neu'
import socket
import hashlib
client = socket.socket()                #初始化socket

client.connect(('localhost',5999))          #选择链接的服务端地址端口  

while True:                          
cmd = input(">>:").strip()
if len(cmd) == 0: continue            #如果输入空信息,重新输入
if cmd.startswith('get'):              #如果以get开头 则发送命令
client.send(cmd.encode('utf-8'))        
server_response = client.recv(1024)        #接收数据长度
print('server response:',server_response)    
client.send(b"ready to recv file")        #发送确认
file_total_size = int(server_response.decode('utf-8'))    
received_size = 0        
filename = cmd.split()[1]      
f = open(filename + ".new",'wb')        #创建新文件
m = hashlib.md5()                  #实例化md5方法
while received_size < file_total_size:        #创建循环接收
if file_total_size - received_size > 1024:      #如果剩余数据仍然大于1024,则继续循环
size = 1024
else:
print('file_total_size',file_total_size)      #如果剩余数据小于或等于1024 则只接收剩余数据大小的数据
print('received_size',received_size)        
size = file_total_size - received_size      #计算剩余尺寸,这里windows有个问题,小于1024后,windows运行,只按照16字节接收数据。
print('last rece:',size)              
data = client.recv(size)          #接收数据
received_size += len(data)      #计算接受的数据长度
m.update(data)                #更新md5,开启md5后,速度显著变慢。
f.write(data)        
#print(file_total_size,received_size)
else:
print('file recv done',received_size,file_total_size)
f.close()
server_file_md5 = client.recv(1024)
print(m.hexdigest())
print(server_file_md5)
client.close()
原文地址:https://www.cnblogs.com/kcrist/p/9661184.html