今天遇到一个很奇怪的问题,在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))