python - 套接字 block /缓冲区大小

标签 python python-2.7 sockets select audio

我在 Python 中的套接字连接上使用 select, block 大小为 1024,以发送两个 wav 文件。服务器正在监听两个套接字,它们都发送 1024 block (使用 print 语句检查)。然后将 block 数据放入一个空的 numpy 数组中以进行进一步处理,但是,当我检查 numpy 数组的大小时,每个数组的值仅为 512,导致接收端合并了 1024 个 block 并导致音频失真.我试过调整 block 大小,以及使用

data = s.recv(1024)
data += s.recv(1024)

这导致两个大小都是 1024,但是音频最终被加速了。可根据要求提供代码。任何帮助深表感谢!

最佳答案

TCP 是一种字节流协议(protocol)。您可以保证以相同的顺序发送字节,但与发送的 block 大小不同。使用(或设计)更高级别的协议(protocol)(HTTP 等)以确保您接收到所有发送的字节。

例如,发送的第一个字节可以是空终止的文件名,后跟作为空终止字符串的文件大小,然后是文件内容。在接受连接时,接收器缓冲 s.recv(1024)调用并提取以空值结尾的文件名和文件大小,然后继续读取,直到缓冲区至少包含“文件大小”字节。

另一种选择是只传输文件并关闭连接,接收器缓冲所有接收到的内容,直到 recv()返回零字节,表示连接已关闭。

第一个选项允许在不关闭连接的情况下发送多个文件。

关于python - 套接字 block /缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397876/

相关文章:

python - 第二列显示重置的 Pandas cumprod

python - 如何重构此 django 查询以不选择每个单独的对象?

python - 类型错误 : writerows() argument must be iterable

python - Python Partial String Comparison 需要 String Comparison 的解决方案

c - 仅 GET 命令正文,缺少 header

c++ - 使用 C++ 套接字时无法接收到多个消息

python - 过滤 NetworkX 图以列出来自具有特定属性的节点的所有边

python - 如何创建按值降序排列的键列表

python - 如何处理 pycurl.error - 超时异常?

c# - 如何在 C# 中的另一个数组内部的结构内部的数组中查找变量的索引