FTPClient中使用completePendingCommand方法注意事项


方法介绍:

    * There are a few FTPClient methods that do not complete the * entire sequence of FTP commands to complete a transaction. These * commands require some action by the programmer after the reception * of a positive intermediate command. After the programmer's code * completes its actions, it must call this method to receive * the completion reply from the server and verify the success of the * entire transaction. public boolean completePendingCommad() throws IOException; { return FTPReply.isPositiveCompletion(getReply()); } 

方法介绍中未说明,在何种情况下应该使用该方法。但是跟踪代码可以发现
这是一个同步阻塞方法,如果调用错误,会导致程序卡住假死在这里。

卡住代码
 String line = _controlInput_.readLine(); 

何时调用?

其实ftp功能,总结来说,只有上传和下载。只有在获取返回流时,才需要调用completePendingCommad方法,因为返回流不是立刻处理的。所以需用手动调用结束方法。

public boolean storeFile(String remote, InputStream local) public OutputStream storeFileStream(String remote) public boolean retrieveFile(String remote, OutputStream local) public InputStream retrieveFileStream(String remote) 

我们看到上面4个人方法,其中两个有流返回,另外两个无返回。当调用有返回流方法时,需要手动调用completePendingCommad方法,即第二个和第四个是需要调用completePendingCommad方法,其他两个方法如果调用了,则会产生卡死超时现象。

注意事项

不可多加或者漏加,否则会导致程序卡死

参考链接

commons-net FTPClient API存取设计

Commons-net FTPClient completePendingCommand()经常使程序死掉的原因分析以及解决方式



作者:北海北_6dc3
链接:https://www.jianshu.com/p/a90cc2aeefca
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM