使用Java URLConnection设置FTP主动/被动模式
问题描述:
使用URLConnection类时,可以设置FTP被动模式还是主动模式?我找不到任何文档,但这是一个基本的功能,很难相信它没有实现。使用Java URLConnection设置FTP主动/被动模式
如果不是,那么在标准Java中还有哪些其他选项?
答
为了让FTP充分发挥作用,您真的需要回到Sockets的低级编程。 URLConnection
和配套根本不适合您的需求(不支持进入被动模式)。幸运的是,Apache Commons已经在Apache Commons Net FTPClient中为你做了很多工作。为了实现你所需要的,只需使用FTPClient#enterLocalPassiveMode()
或FTPClient#enterLocalActiveMode()
答
今天我们捕获TCP/IP包并确认Android/JAVA/URLConnection仍然使用PORT(主动模式)作为FTP。
如果服务器不支持活动模式或网络不支持活动模式,URLConnection将失败。
此答案可能已过时?存在['sun.net.ftp.FtpClient#openPassiveDataConnection()'](http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/net/ftp/FtpClient.java.html# line.252)(由'sun.net.www.protocol.ftp.FtpURLConnection'使用,它是'java.net.URLConnection.openConnection()'中'ftp://'-schemed-URI'的默认处理程序。似乎可以方便*使用* PASV,虽然不是明确的*设置*。 – 2013-01-09 13:29:41
@DavidBullock使用“sun.net”包使您的代码供应商依赖 – 2014-07-08 15:57:59
@Thor我的观点更多,如果你想要所有do是在'ftp://'URL获得数据,那么如果你只是偶尔需要'尽你所能'的行为,Sun/Oracle JVM就已经足够了。但是,它没有记录,因此如果你必须保证您的应用程序可以在需要时获得PASV/EPSV连接,那么您需要BalusC的正确答案(除非他'不支持进入被动模式'有点过于强大,至少JDK6和有400K +代表的人不应该那么无忧无虑; -P)。 – 2014-07-13 22:18:30