套接字块/缓冲区大小

2024-10-01 02:18:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

结果两个大小都是1024,但是音频最终会加速。可根据要求提供代码。非常感谢您的帮助!你知道吗


Tags: 文件数据numpy服务器data数组语句音频
1条回答
网友
1楼 · 发布于 2024-10-01 02:18:39

TCP是一种字节流协议。我们保证以相同的顺序发送字节,但不是以相同的块大小发送。使用(或设计)更高级别的协议(HTTP等)来确保接收所有发送的字节。你知道吗

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

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

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

相关问题 更多 >