python - 如何通过套接字发送分割的音频文件?
问题描述
我正在尝试将音频(.ogg)从客户端发送到一台服务器。我用base64编码,然后用zlib压缩。出于几个原因,我的目标是在大小为 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...')
解决方案
conn, addr = s.accept()
应该在while循环之外。收到前 340 个字节后,您的代码正在等待新连接,但您的客户端正在同一连接上发送文件的其余部分。
推荐阅读
- c++ - 为什么我的代码会引发 SIGBUS 错误,即使我将变量存储在堆中?
- python - Django Celery 无法在任务中查询 postgres db
- spring - Spring Cloud Open Feign:从 gzip 响应正文中剥离的换行符“\n”
- java - 如何解决默认活动未找到问题?
- amazon-web-services - 在 yaml 文件中提供对象数组(或序列映射)作为 IAM 角色定义错误
- django - Django-Rest-Framework 错误:字段名称“product_name”对模型“Store”无效
- python - 我在尝试在 Bokeh 中使用 ColumnDataSource 时遇到错误
- python - 是否可以在 Python 中使用一个函数创建并发线程?
- python - 无法加载 .mp3 格式的音频。加载 libmpg123.dll 失败
- python - 在 pandas 中创建虚拟变量期间 drop_First=true