[zeromq-dev] EOF on file transfer

Tiago Hillebrandt tiagohillebrandt at ubuntu.com
Wed Dec 10 03:03:40 CET 2014


Hello,

The +1 is needed, since the range() starts on 0. Otherwise it will ignore
the last chunk.

Just found another solution using SEEK_CUR:

-filename.seek(offset)
+filename.seek(0, 1)

Thus, it will always continue from current (last) position (
https://docs.python.org/2/library/os.html#os.lseek ).

Thank you all for the suggestions.

Tiago



2014-12-09 16:02 GMT-06:00 KIU Shueng Chuan <nixchuan at gmail.com>:

> "range (offsets+1)" should just be "range (offsets)".
> "filename.seek (offset)" should be "filename.seek (offset * chunksize)"
>
> Try doing a local file copy with your loop first. The problem in your code
> is not with zeromq.
> On 10 Dec 2014 00:47, "Tiago Hillebrandt" <tiagohillebrandt at ubuntu.com>
> wrote:
>
>> Hey guys,
>>
>> I am using the below Python code to transfer big files between a server
>> and a client.
>>
>> *Implementation to send file, server*
>>
>>     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'')
>>
>> *Implementation to receive file, client*
>>
>> while True:
>>     data = pairs.recv()
>>
>>     if data is not '':
>>         target.write(data)
>>     else:
>>         break
>>
>> However, after transfer a big file using this implementation, for some
>> reason an extra data is being added at end of the file:
>>
>> *File server side*
>>
>> $ stat file.zip
>>   File: `file.zip'
>>   Size: 1503656416  Blocks: 2936840    IO Block: 4096   regular file
>>
>> *Client side*
>>
>> $ stat file.zip
>>   File: `file.zip'
>>   Size: 1503906416  Blocks: 2937328    IO Block: 4096   regular file
>>
>> The size and blocks are different between them.
>>
>> That said, do you have any suggestions to calculate/send the end of file
>> properly?
>>
>> Thanks!
>> --
>> *Tiago Hillebrandt*
>> Ubuntu Member
>> Ubuntu Brazilian Community Council Member
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>


-- 
*Tiago Hillebrandt*
Ubuntu Member
Ubuntu Brazilian Community Council Member
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20141209/39ad6aa3/attachment.htm>


More information about the zeromq-dev mailing list