Каков наилучший способ потоковой передачи байтов от клиента к серверу кусками определенного размера?
Сейчас я кодирую аудиофайл с помощью base64, затем сжимаю его с помощью zlib и отправляю через сокет-соединение. Моя проблема заключается в попытке восстановить оригинал на сервере.
Я думал и тестировал, используя пустую строку, которая добавляется со всеми байтами, которые получает сервер. Казалось, все в порядке, но в начале сохранялась буква «b», из-за чего он не мог восстановить исходный аудиофайл.
Я только что попытался декодировать байты и удалить «b» из начало и "" "от конца (данные [2: -1]) каждого набора строк, полученных сервером, но это отрезало несколько символов от оригинала.
сторона клиента:
with open(arquivo, 'rb') as input_file:
abc = base64.b64encode(input_file.read())
try1 = zlib.compress(abc)
n = 338
result = [try1[i:i+n] for i in range(0, len(try1), n)]
HOST = ''
PORT = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((HOST,PORT))
i = 0
for item in result:
item = str(item)
print(item)
s.send(item.encode())
i += 1
print('i = ', i)
time.sleep(2)
Сторона сервера:
HOST = ''
PORT = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print('Servidor Inicializado')
s.bind((HOST,PORT))
s.listen()
audiofile = ''
i = 0
conn, addr = s.accept()
while True:
data1 = conn.recv(2048)
print('data1 undecoded = ', data1)
text = data1.decode()
data = text[2:-1]
print('data EDITADO = ', data)
audiofile = audiofile + data
i += 1
print('i = ', i)
print('audiofile = ', audiofile)
if not data:
print('No Data Received!')
print('Recebeu tratado :', data)
Не знаю, как поступить, любая помощь приветствуется. Спасибо!