__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()