起因

我负责开发保护的生产零碎,须要通过ftp获取银行提供的银行明细入库。最近降级后,频繁曝出ftp连贯异样的问题,钻研了3天总算搞明确了。

景象


代码介绍

降级前

降级后

修复后

代码开发过程

我接手这个代码后,发现了一点,他仅仅在finally外面执行了disconnect办法,而没有执行logout办法。这样会导致,程序这边是断开了,ftp上却依然保护着这个连贯。

所以我在降级后,突出一个手贱,给他加上了logout办法。后果反而导致了生产环境的ftp始终连不上

运行展现

降级前



连贯一个谬误的ftp,两次都是没连上

降级后



连贯一个谬误的ftp,第二次连贯竟然返回了一个true

修复后



连贯一个谬误的ftp,两次都是没连上

降级后的版本为什么会这么诡异?



因为我引入了logout办法,导致finally外面,当clinet断开时,执行logout办法间接异样,反而没有执行disconnect办法。

disconnect办法外面的__initDefaults办法负责初始化clinet的参数。而我又把client作为一个全局变量,没有初始化client参数,间接导致第二次进入代码

connect办法,还留有上一次连贯的参数,间接返回了true,没有进行连贯。所以修复后把clinet作为了一个局部变量