今天遇到一个很奇怪的问题,在python中运行
s.recv(length)时, 每次读取长度不一样,且都小于length,以至于传输文件总是接收不全, 于是翻阅官方文档发现:
1.参数length是最大接收字节长度;
2.每次执行socket.recv()时,就会从tcp的缓冲区读取一次数据,有多少读多少(少于length时);
这就是为什么文件接收不全的原因,要接收整个文件,建议用while,伪代码如下:
while True:
length = getLength(s)
pic = s.recv(length)
while (length > len(pic)):
pic = pic + s.recv(length - len(pic))

在使用Python的socket模块进行文件传输时,遇到了接收文件不完整的问题。原因是recv函数每次从TCP缓冲区读取的数据长度可能小于指定的最大长度,导致文件接收不全。通过使用while循环确保完整接收。
3043

被折叠的 条评论
为什么被折叠?



