fly*_*ike 13 python sockets python-2.7
使用recv()方法时,有时我们无法接收到我们想要的数据,就像使用send()一样.但我们可以使用sendall()来解决发送数据的问题,如何接收数据呢?为什么没有这样的recvall()方法?
没有根本原因可以将这种功能作为标准库的一部分提供.事实上,至少有一次尝试添加recvall().
鉴于它可以很容易地实现为循环recv(),我不认为这是一个重大的遗漏.
send有额外的信息recv没有:有多少数据要发送。如果您有 100 个字节的数据要发送,sendall可以客观地确定第一次调用send发送的数据是否少于 100 个字节,并继续发送数据,直到所有 100 个字节都发送完毕。
当您尝试读取 1024 个字节,但只取回 512 个字节时,您无法知道这是因为其他 512 个字节被延迟而您应该尝试读取更多,还是只有 512 个字节在第一个读取地方。你永远不能说会有更多的数据要读取,从而recvall变得毫无意义。您最多可以决定您愿意等待多长时间(超时)以及您愿意在放弃之前重试多少次。
您可能想知道为什么从文件读取和从套接字读取之间存在明显的区别。对于文件,您可以从文件系统获得关于文件中有多少数据的额外信息,因此您可以可靠地区分 EOF 和其他一些可能阻止您读取可用数据的信息。套接字没有这样的元数据来源。
| 归档时间: |
|
| 查看次数: |
9072 次 |
| 最近记录: |