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

很久没更新文档了,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开发,你应当了解)