Я подключаюсь к предварительно настроенному серверу, который обслуживает четыре разных формата файлов с разными размерами. Каждый файл добавляется с размером файла ...
Пример: lighthouse.jpg
561276ÿØÿà JFIF ` ` ÿî Adobe
«561276» - это размер файла, который необходимо удалить перед сохранением файла.
Пример: randomText.txt
45711111111111111111111111111111111111111111111111111111111
222222222222222222222222222222222222222222222222222222222
33333333333333333333333333333333333333333333333333
44444444444444444444444444444444444444444444444444444444
66666666666666666666
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cvccccccccccccccccccccccccccccccccccccccccccccccc
ddddddddddddddddddddddddddddddddddddddddddddddddddd
«457» - это размер файла, который необходимо удалить перед сохранением файла.
Некоторые файлы имеют размер, равныйдлиной всего 3 цифрыУ некоторых размер файла составляет 6 цифр (как видно здесь). Я хочу сделать мой код независимым от размера;независимо от того, сколько цифр имеет размер.
Я пытался использовать:
while len(buf) < 4:
buf += sock.recv(4 - len(buf))
size = struct.unpack('!i', buf)
, но это только сокращает первые четыре цифры.
И
Я пытался использовать
len = sock.recv(4)
data = sock.recv(len)
, но еще раз ... только сокращает первые четыре цифры
Вот что у меня есть:
def get_size():
buf = ''
while len(buf) < 4:
buf += sock.recv(4 - len(buf))
size = struct.unpack('!i', buf)
print "[*] Receiving %s bytes" % size
def download_pic():
size = get_size()
fname = 'tst.jpg'
with open(fname, 'wb') as img:
while True:
data = sock.recv(1024)
if not data:
break
img.write(data)
print '[*] {0} received!'.format(fname)
def main():
doconnectionstuffandprinttoconsole() #establishes connection
answer = input("[>] Your Selection: ")
sock.send(str(answer))
if answer == 2:
download_pic()
sock.close()
Любая помощь в сокращении размера из файла (-ов) будет принята с благодарностью!