import socket
import os
import time

client = socket.socket()  # 声明socket类型，同时生成socket连接对象
try:
        client.connect(('10.12.40.108', 6666))  # 链接服务器的ip + 端口
except ConnectionRefusedError:
        print("Can't connect to the server: server not found.")

BASE_DIR = os.path.dirname(os.path.abspath(__file__))  # 获得当前目录

while True:
	msg = input(">>:").strip()  # 获得要向服务端发送的信息，字符串格式
	if len(msg) == 0:
		continue

	client.send(msg.encode("utf-8"))  # 将字符串格式编码成bytes，发送
	if msg == '/break':
		break
	data = client.recv(1024)  # 接收服务端返回的内容
	if len(str(data, 'utf-8').split('|')) == 2:  # 如果返回的字符串长度为2，说明针对的任务2，从服务端传回一个文件
		filename, filesize = str(data, 'utf8').split('|')  # 获得指定文件的名称，文件大小
		path = os.path.join(BASE_DIR, filename)  # 指定文件的保存路径
		filesize = int(filesize)  # 文件大小转换成整形
		f = open(path, 'wb')
		f.close()
		f = open(path, 'ab')  # 以二进制格式打开一个文件用于追加。如果该文件不存在，创建新文件进行写入。
		has_receive = 0  # 统计接收到的字节数
		start_time = time.time()
		while has_receive != filesize:
			print('\r',end = "")
			data1 = client.recv(1024)  # 一次从服务端接收1024字节的数据
			f.write(data1)  # 写入
			has_receive += len(data1)  # 更新接收到的字节数
			print("Got: "+str(int((has_receive/filesize)*100))+"% ("+str(has_receive/1024)+' KB / '+str(filesize/1024) + ' KB) '
			+ str(int((has_receive/1024)/(time.time()-start_time+0.000001))) + ' KB/S',end="")
		f.close()  # 关闭文件
		print()
	print("recv:", data.decode())

client.close()

