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()
server/接收端

相关文章:

  • 2022-03-10
  • 2022-12-23
  • 2021-11-09
  • 2021-04-15
  • 2021-12-21
  • 2021-10-05
  • 2022-03-02
猜你喜欢
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
  • 2021-09-23
  • 2022-12-23
相关资源
相似解决方案