FTP-作为Android开发,你应当了解

作者: 遛狗的程序员 | 来源:发表于2017-11-28 21:51 被阅读1416次

    很久没更新文档了,1 : 确实很忙;2.自己学习的路还很长,知其然不知所以然的东西还很多。

    知识点回顾

    首先,我们来看下FTP相关定义:

    • 文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。我们要分清文件传送(file transfer)和文件访问(file access)之间的区别,前者是FTP提供的,后者是如NFS等应用系统提供的。
    • FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。
    • FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。
    • 运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。

    Android中使用

    在Android中我们可以使用第三方的库来操作FTP,比如Apache的包,commons-net-3.6.jar。下载地址http://commons.apache.org/proper/commons-net/download_net.cgi。

    如何使用
    1. 初始化FTPClinet,代码如下:
    ftpClient = new FTPClient();
    

    2.设置登录地址和端口号,代码如下:

    ftpClient.connect(TrackConstants.FTP_URL, TrackConstants.FTP_PORT);
    

    3.设置登录用户名和密码,代码如下:

    ftpClient.login(TrackConstants.FTP_USERNAME, TrackConstants.FTP_PWD);
    

    4.设置文件类型和采用被动传输方式,代码如下:

    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    

    5.传输文件,代码如下:

    //文件上传吧~
    FileInputStream fileInputStream = new FileInputStream(FilePath);
    ftpClient.storeFile(FileName, fileInputStream);
    

    6.关闭连接,代码如下:

    //关闭文件流
    fileInputStream.close();
    
    //退出登陆FTP,关闭ftpCLient的连接
    ftpClient.logout();
    ftpClient.disconnect();
    

    小提醒

    主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。

    Android FTP客户端核心代码如下:
    new Thread() {
                @Override
                public void run() {
                    super.run();
                    try {
                        //1.要连接的FTP服务器Url,Port
                        ftpClient.connect(TrackConstants.FTP_URL, TrackConstants.FTP_PORT);
    
                        //2.登陆FTP服务器
                        ftpClient.login(TrackConstants.FTP_USERNAME, TrackConstants.FTP_PWD);
    
                        //3.看返回的值是不是230,如果是,表示登陆成功
                        int reply = ftpClient.getReplyCode();
    
                        if (!FTPReply.isPositiveCompletion(reply)) {
                            //断开
                            ftpClient.disconnect();
                            return;
                        }
    
                        //设置存储路径
                        ftpClient.makeDirectory("/data/" + directory );
                        ftpClient.changeWorkingDirectory("/data/" + directory);
    
                        //设置上传文件需要的一些基本信息
                        ftpClient.setBufferSize(1024);
                        ftpClient.setControlEncoding("UTF-8");
    //                    ftpClient.enterLocalPassiveMode();
                        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    
                        //文件上传吧~
                        FileInputStream fileInputStream = new FileInputStream(FilePath);
                        ftpClient.storeFile(FileName, fileInputStream);
    
                        //关闭文件流
                        fileInputStream.close();
    
                        //退出登陆FTP,关闭ftpCLient的连接
                        ftpClient.logout();
                        ftpClient.disconnect();
    
    
                    } catch (SocketException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }.start();
    

    作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。

    qrcode_for_gh_1ba0785324d6_430.jpg

    当然喜爱技术,乐于分享的你也可以可以添加作者微信号:

    WXCD.jpeg

    相关文章

      网友评论

        本文标题:FTP-作为Android开发,你应当了解

        本文链接:https://www.haomeiwen.com/subject/jbhybxtx.html