是因为我负责生产系统的开发和维护,需要通过ftp和store获取银行提供的银行明细他们在仓库里。最近升级后频繁暴露ftp连接不正常的问题。经过3天的研究,我终于弄明白了。现象代码介绍升级前,升级后,修复后,代码开发过程接手代码后,发现finally中只执行了disconnect方法,并没有执行logout方法。这会导致程序断开连接,但是在ftp上仍然保持着连接。所以在升级之后,我高亮了一只可怜的手,给他添加了注销方法。导致生产环境中的ftp一直连接不上运行显示。升级前,连接了一个错误的ftp。升级后,ftp连错两次。第二个连接在修复后实际上返回了一个真正的连接。错误的ftp,升级版两次连不上。为什么这么奇怪?因为我引入了logout方法,在finally中,当clinet断开连接时,logout方法的执行直接异常,而disconnect方法并没有执行。disconnect方法中的__initDefaults方法负责clinet的参数初始化。而我用client作为全局变量,没有初始化client参数,直接导致第二次进入代码connect方法,留下了上次连接的参数,直接返回true,没有连接。所以修复后,clinet作为局部变量使用
