Android应用开发之Android端与笔记本利用局域网进行FTP通信
白羽 2018-08-10 来源 :网络 阅读 977 评论 0

摘要:本文将带你了解Android应用开发之Android端与笔记本利用局域网进行FTP通信,希望本文对大家学Android有所帮助

        本文将带你了解Android应用开发之Android端与笔记本利用局域网进行FTP通信,希望本文对大家学Android有所帮助


先看图
打开前:



打开后:





Activity类:(不要纠结于这个类的完整性,主要看一下怎么操作ServerFtplet类即可)
Java代码  import android.content.Context;  import android.net.wifi.WifiInfo;  import android.net.wifi.WifiManager;  import android.os.Bundle;  import android.view.View;  import android.widget.EditText;  import android.widget.ImageView;  import android.widget.TextView;    import com.mb.goods.app.BaseActivity;  import com.mb.goods.app.R;  import com.mb.goods.util.ServerFtplet;    /**  * 远程管理  * @author pythoner  *   */  public class RemoteManagementActivity extends BaseActivity implements View.OnClickListener{        private Context context;      private TextView tv_des;      private EditText et_ftp;      private WifiInfo wifiInfo;      private boolean checked=false;      private ServerFtplet ftp;            @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_remote_management);          context = this;          WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);          wifiInfo = wifiManager.getConnectionInfo();          ftp=ServerFtplet.getInstance();          initActionBar("远程管理", null, null);          initViews();      }        @Override      public void initViews() {          // TODO Auto-generated method stub          TextView tv_state=$(R.id.tv_state);          tv_state.setText("网络状态\n"+wifiInfo.getSSID());          //0到-50表示信号最好,-50到-70表示信号偏差,小于-70表示最差,有可能连接不上或者掉线          int level=Math.abs(wifiInfo.getRssi());          ImageView tv_rssi=$(R.id.tv_rssi);          tv_rssi.setImageLevel(level);                    tv_des=$(R.id.tv_des);          et_ftp=$(R.id.et_ftp);          $(R.id.btn_ok).setOnClickListener(this);      }        @Override      public void updateViews(Object obj) {          // TODO Auto-generated method stub        }        @Override      public void updateTheme(int color) {          super.updateTheme(color);          setThemeDrawable(context, R.id.btn_ok);      }        @Override      public void onClick(View v) {          // TODO Auto-generated method stub          switch (v.getId()) {          case R.id.btn_ok:              if(checked){                  tv_des.setText("打开后可以在计算机上管理本设备上的文件");                  et_ftp.setVisibility(View.GONE);                  et_ftp.setText("");                  ((TextView)v).setText("打开");                  ftp.stop();              }else{                  tv_des.setText("在计算机中输入:");                  et_ftp.setVisibility(View.VISIBLE);                  et_ftp.setText("ftp://"+getIP()+":"+ServerFtplet.PORT+"/");                  ((TextView)v).setText("关闭");                  ftp.start();              }              checked=!checked;              break;            default:              break;          }      }             @Override      protected void onDestroy() {          super.onDestroy();          ftp.stop();      }        }  import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.mb.goods.app.BaseActivity;
import com.mb.goods.app.R;
import com.mb.goods.util.ServerFtplet;

/**
 * 远程管理
 * @author pythoner
 * 
 */
public class RemoteManagementActivity extends BaseActivity implements View.OnClickListener{

 private Context context;
 private TextView tv_des;
 private EditText et_ftp;
 private WifiInfo wifiInfo;
 private boolean checked=false;
 private ServerFtplet ftp;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_remote_management);
  context = this;
  WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
  wifiInfo = wifiManager.getConnectionInfo();
  ftp=ServerFtplet.getInstance();
  initActionBar("远程管理", null, null);
  initViews();
 }

 @Override
 public void initViews() {
  // TODO Auto-generated method stub
  TextView tv_state=$(R.id.tv_state);
  tv_state.setText("网络状态\n"+wifiInfo.getSSID());
  //0到-50表示信号最好,-50到-70表示信号偏差,小于-70表示最差,有可能连接不上或者掉线
  int level=Math.abs(wifiInfo.getRssi());
  ImageView tv_rssi=$(R.id.tv_rssi);
  tv_rssi.setImageLevel(level);
  
  tv_des=$(R.id.tv_des);
  et_ftp=$(R.id.et_ftp);
  $(R.id.btn_ok).setOnClickListener(this);
 }

 @Override
 public void updateViews(Object obj) {
  // TODO Auto-generated method stub

 }

 @Override
 public void updateTheme(int color) {
  super.updateTheme(color);
  setThemeDrawable(context, R.id.btn_ok);
 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  switch (v.getId()) {
  case R.id.btn_ok:
   if(checked){
    tv_des.setText("打开后可以在计算机上管理本设备上的文件");
    et_ftp.setVisibility(View.GONE);
    et_ftp.setText("");
    ((TextView)v).setText("打开");
    ftp.stop();
   }else{
    tv_des.setText("在计算机中输入:");
    et_ftp.setVisibility(View.VISIBLE);
    et_ftp.setText("ftp://"+getIP()+":"+ServerFtplet.PORT+"/");
    ((TextView)v).setText("关闭");
    ftp.start();
   }
   checked=!checked;
   break;

  default:
   break;
  }
 }
 
  @Override
    protected void onDestroy() {
        super.onDestroy();
        ftp.stop();
    }
 
}


关键的ServerFtplet工具类:
Java代码  import java.io.File;  import java.io.IOException;  import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;    import org.apache.ftpserver.FtpServer;  import org.apache.ftpserver.FtpServerFactory;  import org.apache.ftpserver.ftplet.Authority;  import org.apache.ftpserver.ftplet.DefaultFtplet;  import org.apache.ftpserver.ftplet.FtpException;  import org.apache.ftpserver.ftplet.FtpRequest;  import org.apache.ftpserver.ftplet.FtpSession;  import org.apache.ftpserver.ftplet.Ftplet;  import org.apache.ftpserver.ftplet.FtpletResult;  import org.apache.ftpserver.ftplet.UserManager;  import org.apache.ftpserver.listener.ListenerFactory;  import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;  import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;  import org.apache.ftpserver.usermanager.impl.BaseUser;  import org.apache.ftpserver.usermanager.impl.WritePermission;    import android.os.Environment;    /**  * 利用Android设备作为FTP服务器  * @author Ni Guijun  *  */  public class ServerFtplet extends DefaultFtplet {        public static final int PORT = 3333;  //  public static final String directory = Environment.getExternalStorageDirectory().getPath();//指定SD卡根目录      public static final String directory = Environment.getExternalStorageDirectory().getPath() + "/cloudStore/data/";//指定到SD卡某个目录            private FtpServer mFtpServer;      private boolean isAnonymous = true;//是否需要匿名登陆        private final String mUser = "admin";//非匿名登陆时的账户      private final String mPassword = "";        private static ServerFtplet mInstance;        public static ServerFtplet getInstance() {          if (mInstance == null) {              mInstance = new ServerFtplet();          }          return mInstance;      }        /**      * FTP启动      *       * @throws FtpException      */      public void start(){          try{              if (null != mFtpServer && false == mFtpServer.isStopped()) {                  return;              }                    File file = new File(directory);              if (!file.exists()) {                  file.mkdirs();              }                    FtpServerFactory serverFactory = new FtpServerFactory();              ListenerFactory listenerFactory = new ListenerFactory();                    // 设定端末番号              listenerFactory.setPort(PORT);                    // 通过PropertiesUserManagerFactory创建UserManager然后向配置文件添加用户              PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();              userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());              UserManager userManager = userManagerFactory.createUserManager();                    List auths = new ArrayList();              Authority auth = new WritePermission();              auths.add(auth);                    // 添加用户              BaseUser user = new BaseUser();              if(isAnonymous){                  user.setName("anonymous");//匿名登陆,不需要密码              }else{                  user.setName(mUser);                  user.setPassword(mPassword);                  user.setAuthorities(auths);              }              user.setHomeDirectory(directory);              userManager.save(user);                    // 设定Ftplet              Map ftpletMap = new HashMap();              ftpletMap.put("Ftplet", this);                    serverFactory.setUserManager(userManager);              serverFactory.addListener("default", listenerFactory.createListener());              serverFactory.setFtplets(ftpletMap);                    // 创建并启动FTPServer              mFtpServer = serverFactory.createServer();              mFtpServer.start();          }catch(FtpException e){              e.printStackTrace();          }      }        /**      * FTP停止      */      public void stop() {          // FtpServer不存在和FtpServer正在运行中          if (null != mFtpServer && false == mFtpServer.isStopped()) {              mFtpServer.stop();              mFtpServer=null;          }      }        @Override      public FtpletResult onAppendStart(FtpSession session, FtpRequest request)              throws FtpException, IOException {          return super.onAppendStart(session, request);      }        @Override      public FtpletResult onAppendEnd(FtpSession session, FtpRequest request)              throws FtpException, IOException {          return super.onAppendEnd(session, request);      }        @Override      public FtpletResult onLogin(FtpSession session, FtpRequest request)              throws FtpException, IOException {          return super.onLogin(session, request);      }        @Override      public FtpletResult onConnect(FtpSession session) throws FtpException,              IOException {          return super.onConnect(session);      }        @Override      public FtpletResult onDisconnect(FtpSession session) throws FtpException,              IOException {          return super.onDisconnect(session);      }        @Override      public FtpletResult onUploadStart(FtpSession session, FtpRequest request)              throws FtpException, IOException {          return super.onUploadStart(session, request);      }        @Override      public FtpletResult onUploadEnd(FtpSession session, FtpRequest request)              throws FtpException, IOException {          String FtpUploadPath = directory + request.getArgument();          // 接收到文件后立即删除          File uploadFile = new File(FtpUploadPath);          uploadFile.delete();          return super.onUploadEnd(session, request);      }  }  import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.DefaultFtplet;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpRequest;
import org.apache.ftpserver.ftplet.FtpSession;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.FtpletResult;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.WritePermission;

import android.os.Environment;

/**
 * 利用Android设备作为FTP服务器
 * @author Ni Guijun
 *
 */
public class ServerFtplet extends DefaultFtplet {

 public static final int PORT = 3333;
// public static final String directory = Environment.getExternalStorageDirectory().getPath();//指定SD卡根目录
 public static final String directory = Environment.getExternalStorageDirectory().getPath() + "/cloudStore/data/";//指定到SD卡某个目录
 
 private FtpServer mFtpServer;
 private boolean isAnonymous = true;//是否需要匿名登陆

 private final String mUser = "admin";//非匿名登陆时的账户
 private final String mPassword = "";

 private static ServerFtplet mInstance;

 public static ServerFtplet getInstance() {
  if (mInstance == null) {
   mInstance = new ServerFtplet();
  }
  return mInstance;
 }

 /**
  * FTP启动
  * 
  * @throws FtpException
  */
 public void start(){
  try{
   if (null != mFtpServer && false == mFtpServer.isStopped()) {
    return;
   }
 
   File file = new File(directory);
   if (!file.exists()) {
    file.mkdirs();
   }
 
   FtpServerFactory serverFactory = new FtpServerFactory();
   ListenerFactory listenerFactory = new ListenerFactory();
 
   // 设定端末番号
   listenerFactory.setPort(PORT);
 
   // 通过PropertiesUserManagerFactory创建UserManager然后向配置文件添加用户
   PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
   userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
   UserManager userManager = userManagerFactory.createUserManager();
 
   List auths = new ArrayList();
   Authority auth = new WritePermission();
   auths.add(auth);
 
   // 添加用户
   BaseUser user = new BaseUser();
   if(isAnonymous){
    user.setName("anonymous");//匿名登陆,不需要密码
   }else{
    user.setName(mUser);
    user.setPassword(mPassword);
    user.setAuthorities(auths);
   }
   user.setHomeDirectory(directory);
   userManager.save(user);
 
   // 设定Ftplet
   Map ftpletMap = new HashMap();
   ftpletMap.put("Ftplet", this);
 
   serverFactory.setUserManager(userManager);
   serverFactory.addListener("default", listenerFactory.createListener());
   serverFactory.setFtplets(ftpletMap);
 
   // 创建并启动FTPServer
   mFtpServer = serverFactory.createServer();
   mFtpServer.start();
  }catch(FtpException e){
   e.printStackTrace();
  }
 }

 /**
  * FTP停止
  */
 public void stop() {
  // FtpServer不存在和FtpServer正在运行中
  if (null != mFtpServer && false == mFtpServer.isStopped()) {
   mFtpServer.stop();
   mFtpServer=null;
  }
 }

 @Override
 public FtpletResult onAppendStart(FtpSession session, FtpRequest request)
   throws FtpException, IOException {
  return super.onAppendStart(session, request);
 }

 @Override
 public FtpletResult onAppendEnd(FtpSession session, FtpRequest request)
   throws FtpException, IOException {
  return super.onAppendEnd(session, request);
 }

 @Override
 public FtpletResult onLogin(FtpSession session, FtpRequest request)
   throws FtpException, IOException {
  return super.onLogin(session, request);
 }

 @Override
 public FtpletResult onConnect(FtpSession session) throws FtpException,
   IOException {
  return super.onConnect(session);
 }

 @Override
 public FtpletResult onDisconnect(FtpSession session) throws FtpException,
   IOException {
  return super.onDisconnect(session);
 }

 @Override
 public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
   throws FtpException, IOException {
  return super.onUploadStart(session, request);
 }

 @Override
 public FtpletResult onUploadEnd(FtpSession session, FtpRequest request)
   throws FtpException, IOException {
  String FtpUploadPath = directory + request.getArgument();
  // 接收到文件后立即删除
  File uploadFile = new File(FtpUploadPath);
  uploadFile.delete();
  return super.onUploadEnd(session, request);
 }
}



本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程