gpt4 book ai didi

Python 阻塞 recv 返回的数据少于请求的数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:46:03 25 4
gpt4 key购买 nike

我有一个用 C 编写的回显服务器和一个用 Python 编写的测试客户端。服务器有一个有限的读取缓冲区,例如 16 字节。当客户端发送超过16个字节时,它会先读取16个,写回客户端,然后再读取。

我用 telnet 测试了服务器,我得到了与输入相同的字符串,即使它长于 16 个字节。但是,此 Python 客户端不起作用。

//data is initialized to be 20 bytes data
Len = 20
sock.setblocking(1)
sock.send(data)
recvdata = sock.recv(Len)
if(recvdata != data):
print recvdata.encode('hex')
print Len
print data.encode('hex')

此客户端仅接收服务器写回的前 16 个字节。服务器日志确实显示了两次写入 (16 + 4)。 Python 输出如下所示

1234567890123456 //recvdata
20
12345678901234567890 //sent data

我不确定为什么会这样,为什么阻塞 recv() 返回的数据少于要求的数据?

最佳答案

您给 recv 的长度是最大值,而不是目标。无法保证 recv 会等待接收到 Len 字节 - 它可以在读取任何数据后立即返回。

recv 的手册页说:receive 调用通常返回任何可用数据,直到请求的数量,而不是等待收到请求的全部数量。

如果您需要读取给定数量的字节,则需要在循环中调用recv 并连接返回的数据包,直到您读取足够多为止。

关于Python 阻塞 recv 返回的数据少于请求的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com