1 import socket 2 import json 3 import struct 4 5 6 buffer = 4096 7 # 每次接收长度 8 sk = socket.socket() 9 sk.bind(("127.0.0.1",8080)) 10 sk.listen() 11 conn, addr = sk.accept() 12 13 head_len = conn.recv(4) 14 # 获取包装后的报头长度 15 head_len = struct.unpack("i",head_len)[0] 16 # 解包报头长度 17 json_head = conn.recv(head_len) 18 # 接收报头 19 head = json.loads(json_head) 20 print(head) 21 # 反序列化报头 22 filesize = head["filesize"] 23 # 获取文件大小 24 n_filesize = filesize 25 # 现在剩余未传输文件大小 26 filename = head["filename"] 27 # 获取文件名称 28 with open(filename,"wb") as f: 29 # 打开文件 30 while True: 31 print(str(round(100 - n_filesize/filesize * 100,2)) + "%") 32 # 显示进度 33 if n_filesize >= buffer: 34 # 文件剩余大小大于等于每次传输的大小 35 content = conn.recv(buffer) 36 # 接收buffer长度的数据 37 f.write(content) 38 # 将接收的数据写入 39 n_filesize -= buffer 40 # 文件大小减去本次传输的大小 41 else: 42 # 文件剩余大小不足buffer 43 # 将剩余文件一次性传完 44 content = conn.recv(n_filesize) 45 # 接收剩余文件 46 f.write(content) 47 # 将接收的数据写入文件 48 print("100%") 49 break 50 conn.close() 51 sk.close()
相关文章: