python 实现断点续传
服务端
import socketserver
import struct
import os,time
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
len_name = self.request.recv(4)
name_data = struct.unpack('i', len_name)[0]
file_name = self.request.recv(name_data).decode('utf8')
len_data = self.request.recv(4)
len_num = struct.unpack('i', len_data)[0]
if os.path.isfile(file_name):
len_size = os.path.getsize(file_name)
else:
len_size = 0
len_num = len_num - len_size
print(len_size)
if len_num == 0:
print('文件已存在')
else:
while len_size % 1024 > 0:
data = self.request.recv(1024)
len_size = len_size - len(data)
self.request.recv(len_size)
while len_num > 0:
data = self.request.recv(1024)
with open(file_name,'ab') as f:
f.write(data)
len_num = len_num - len(data)
print(os.path.getsize(file_name))
server = socketserver.ThreadingTCPServer(('127.0.0.1',8096),Myserver)
server.serve_forever()
客户端
import socket
import struct
client = socket.socket()
client.connect(('127.0.0.1',8096))
file_name = 'F:/StaffInformation/bin/4.png'.encode('utf-8')
with open('F:/StaffInformation/bin/1.png','rb',) as f:
data = f.read()
print(len(data))
len_name = struct.pack('i', len(file_name))
len_data = struct.pack('i',len(data))
client.send(len_name)
client.send(file_name)
client.send(len_data)
client.send(data)