最近项目有个要求,本地建立个FTP服务器用来进行获取一些数据文件之类的。
首先我们需要导几个jar包。点击获取jar包提取码: 7kpq
将jar包添加进项目,都会做,然后就上代码吧:
public class FTPServer {
String dirname="";
private static FtpServer mFtpServer;
//获取id地址
public static String getLocalIpAddress(){
try {
ArrayList<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : interfaces){
ArrayList<InetAddress> addresses = Collections.list(networkInterface.getInetAddresses());
for (InetAddress address : addresses){
if (!address.isLoopbackAddress()){
String strAddress = address.getHostAddress().toUpperCase();
boolean isipv4 = Isipv4(strAddress);
if (isipv4){
return strAddress;
}
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
//检测IP地址
private static boolean Isipv4(String ipv4){
if (ipv4 == null || ipv4.length() == 0){
return false;
}
String[] parts = ipv4.split("\\.");
if (parts.length != 4){
return false;
}
for (String part : parts){
int n = Integer.parseInt(part);
if (n<0 || n> 255){
return false;
}
}
return true;
}
public static void startFtpServer(){
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
serverFactory.addListener("default",factory.createListener());
factory.setPort(1234);//这里设置一个端口号
factory.setServerAddress("192.168.12.12");//这里设置一个IP地址,如果你不固定就可以获取当前IP地址也就是最上面的方法在这里填上。
serverFactory.addListener("default",factory.createListener());
BaseUser user = new BaseUser();
user.setName("我是用户名");//注意这里相当于服务端给客户端创建了一个可以直接连接的用户名
user.setPassword("密码");//这里则是对应用户名的密码
user.setEnabled(true);
user.setMaxIdleTime(3000);
user.setHomeDirectory(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator);
ArrayList<Authority> authorities = new ArrayList<>();
authorities.add(new WritePermission());
user.setAuthorities(authorities);
try {
serverFactory.getUserManager().save(user);
} catch (FtpException e) {
e.printStackTrace();
}
if (mFtpServer!=null){
mFtpServer.stop();
}
mFtpServer = serverFactory.createServer();
try {
mFtpServer.start();
// mHandler.sendEmptyMessage(0x0001);
} catch (FtpException e) {
e.printStackTrace();
}
}
public static void stopFtpServer(){//判断服务器是否打开了 这里我的需求是要一直打开所以重复调用了,但是平常来说,我们不需要服务器的时候就需要关闭,否则确实占用资源,如果需要关闭可以不调用startFtpServer();
if (mFtpServer !=null){
mFtpServer.stop();
mFtpServer=null;
startFtpServer();
}else {
startFtpServer();
}
}
以上代码配合注释肯定可以理解。
如果是使用本地IP地址的话其实可以调用最上面的检测IP地址方法,然后在设置IP地址时将检测的IP地址结果设置上去就可以。
(注意Android版本号的适配以及权限设置)
当然也可以下载一些ftp服务端或者ftp客户端工具去检测测试。也可以在本地电脑配置一个FTP服务器检测。