Как отправить разделенный аудиофайл через сокет? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь отправить аудио (.ogg) с клиента на один сервер. Я кодирую его с помощью base64, а затем сжимаю с помощью zlib. По нескольким причинам моя цель состоит в том, чтобы отправить это аудио в 'windows' с размером 340 байт.

Кажется, что сторона клиента работает нормально, но моя сторона сервера только получает первые 340 байтов и остановка. Любая помощь будет оценена. Спасибо!

Клиент

import socket
import time
import datetime as dt
import base64

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)

Серверная часть

import sqlite3
import socket
import time
import datetime as dt
import base64
import zlib
import pandas as pd
from collections import deque


HOST = ''
PORT = 9999

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST,PORT))
s.listen()
audiofile = ''
i = 0

try:

    while True:

        conn, addr = s.accept()
        rect = str(dt.datetime.now())
        print('Conectado com', addr[0],':', str(addr[1]), ' recebido às ', rect)

        data1 = conn.recv(2048)

        data = data1.decode()

        print('data = ', data)

        audiofile = audiofile + data
        i += 1
        print('i = ', i)
        print('audiofile = ', audiofile)

        if not data:
            print('No Data Received!')


except:

    print('No data received...')

1 Ответ

1 голос
/ 16 января 2020

conn, addr = s.accept() должно быть за пределами времени l oop. Ваш код ожидает нового соединения после получения первых 340 байтов, но ваш клиент отправляет оставшуюся часть файла по тому же соединению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...