ftplib使用小记

使用ftplib时发现几处不近人意的地方,不知道是不是只有我遇见了,因为没有在网上查到相关的信息
1.下载.bmp文件时会失真,下载下来的.png图片无法打开

出现原因:这个bug找了好半天,最后发现是这个库中在第1083行,创建本地文件时用的是w(文本文件)格式打开文件,以这种方式打开会把写入的特殊字符(比如:\n回车换行等等)会以文本格式转换,而.bmp文件和.png文件中有一些信息与之特殊字符相冲突,所以就造成了'失真'

解决办法:改成以wb和rb格式打开文件.

2.如果服务器上没有客户端请求的文件,客户端就会出现阻塞的现象


出现原因:在ftplib的FtpClose函数中,都已经shoutdown和closesocket了,也就无法再得到服务器的消息,但在函数的readresp,就造成了阻塞
解决办法:注释掉939行return(readresp('2', ctrl));

3.在使用官方的例子时发现启动一次只能下载一个文件,下完一个文件后再下第二个文件就报200 Type set to I.


出现原因:在ftplib的FtpXfer函数中当完成一次上传或下载操作后return FtpClose(nData);就把socket和网络都给关了,所以在下次再想下载或上传文件就必须先连接服务器,所以在ftp_connect中每次操作都先if (conn) return; 查看conn是否为空,但是在process_file每完成操作的时候都没有清空conn和logged_in,所以导致不能第二次操作
解决办法:在process_file的最后加上free(conn);conn=NULL;logged_in=0;第次操作完后都要清空这两个东西
补充:其实常规做法应该在每次操作完成后不应该与服务器断开连接,我把FtpXfer的return FtpClose(nData);注释年后就报错,看了半天没找到原因...

可能还有更多的bug,有待大家去发现...
P.S:靠,早知道这个库有这么多bug,我就自己写一个了

原文地址:https://www.cnblogs.com/minggoddess/p/2249277.html