Я использую приведенный ниже код Python для передачи больших файлов между сервером и клиентом с использованием zeromq.EOF на передачу файла zeromq
Реализация отправить файл, сервер
CHUNK_SIZE = 250000
message = pair.recv() # message is the path to the file
filename = open(message, 'rb')
filesize = os.path.getsize(message)
offsets = (int(ceil(filesize/CHUNK_SIZE)), 0)[filesize <= CHUNK_SIZE]
for offset in range(offsets + 1):
filename.seek(offset)
chunksize = CHUNK_SIZE
if offset == offsets:
chunksize = filesize - (CHUNK_SIZE * (offset - 1)) # calculate the size of the last chunk
data = filename.read(chunksize)
pair.send(data)
pair.send(b'')
Реализация получить файл, клиент
while True:
data = pairs.recv()
if data is not '':
target.write(data)
else:
break
Однако после передачи большого файла с помощью этой реализации, по какой-либо причине дополнительного данные добавляются в конце файла:
файла на стороне сервера
$ stat file.zip
File: `file.zip'
Size: 1503656416 Blocks: 2936840 IO Block: 4096 regular file
стороне клиента
$ stat file.zip
File: `file.zip'
Size: 1503906416 Blocks: 2937328 IO Block: 4096 regular file
Размер и блоки отличаются между ними.
У вас есть предложения по правильному вычислению/отправке конца файла?
Thanks