1 import socket
2 import struct
3 import json
4 import os
5
6
7 buffer = 4096
8 # 每次send发送的大小
9 sk = socket.socket()
10 sk.connect(("127.0.0.1",8080))
11
12 head = {"filepath":"F:工具",
13 "filename":"nox_setup_v6.2.7.1_full.exe",
14 "filesize":None
15 }
16 # 自定义报头
17 filepath = os.path.join(head["filepath"],head["filename"])
18 # 拼接文件路径
19 filesize = os.path.getsize(filepath)
20 head["filesize"] = filesize
21 n_filesize = filesize
22 # 获取文件大小
23 json_head = json.dumps(head).encode("utf8")
24 # 将报头序列化并转码成utf8
25 head_len = len(json_head)
26 # 获取报头文件长度
27 head_len = struct.pack("i",head_len)
28 # 将报头长度包装为四个字节
29 # 参数"i"代表要包装的是数字int类型
30 sk.send(head_len)
31 sk.send(json_head)
32 with open(filepath,"rb") as f:
33 # 打开文件
34 while True:
35 print(str(round(100 - n_filesize/filesize * 100,2)) + "%")
36 # 显示进度
37 if n_filesize >= buffer:
38 # 如果文件还大于buffer,则按buffer大小传输
39 content = f.read(buffer)
40 # 读取buffer大小的内容
41 sk.send(content)
42 # 发送文件
43 n_filesize -= buffer
44 # 文件总大小减去本次发送的大小
45 else:
46 content = f.read(n_filesize)
47 # 读取剩余文件
48 sk.send(content)
49 # 发送剩余文件
50 print("100%")
51 break
52 sk.close()