#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import socket
import struct
import time
IP_ADDRESS = "192.168.1.2"
FILENAME_EXTENSION = '.alac'
sock = socket.socket()
sock.connect((IP_ADDRESS, 9090))
encoded_filename_extension = FILENAME_EXTENSION.encode("UTF-8") # Кодирование расширения файла
length_of_encoded_filename_extension = len(encoded_filename_extension) # Получение длины расширения файла в байтах
struct_leng_of_encoded_filename_extension = struct.pack('H', length_of_encoded_filename_extension) # Запаковка длины расширения файла
sock.send(struct_leng_of_encoded_filename_extension) # Посылка длины расширения файла
if sock.recv(2).decode("UTF-8") == "OK": # Ожидание получение OK
sock.send(struct.pack('{}s'.format(length_of_encoded_filename_extension),
encoded_filename_extension)) # Посылает запакованную строку - расширение файла
if sock.recv(2).decode("UTF-8") == "OK":
pass
quantity_of_files = struct.unpack('Q', sock.recv(8))[0] # Распаковывает количество файлов
for i in range(quantity_of_files): # Итерации по количеству файлов
file_size = struct.unpack('Q', sock.recv(8))[0] # Получает и распаковывает размер файла
sock.send('OK'.encode('UTF-8')) # Посылает OK
file_name_size = struct.unpack('H', sock.recv(2))[0] # Получает и распаковывает длину имени
sock.send('OK'.encode('UTF-8')) # Посылает OK
file_name = struct.unpack('{}s'.format(file_name_size),
sock.recv(file_name_size))[0].decode("UTF-8") # Получает и распаковывает имя файла
sock.send('OK'.encode('UTF-8')) # Посылает OK
open_file = open(file_name, 'wb') # Открывает файл, и записывает туда все данные, получаемые из сокета
for i in range(file_size//16384):
open_file.write(sock.recv(16384))
time.sleep(0.0000000000000000000000000001)
open_file.write(sock.recv(file_size%16384))
open_file.close()
sock.send('OK'.encode('UTF-8'))
print(file_name, 'written')
sock.close()
input("Press Enter to exit")