iOS客户端开启FTP,其他设备访问手机本地文件操作实现
因为项目需要,需要在手机端搭建FTP服务,让其他设备来访问手机某个路径文件夹下边的文件,实现下载功能。
主要实现借助第三方库XMFTPServer, 原来文件有修改,实现带用户名、密码访问连接FTP。
首先封装FTPManager,便于其他地方使用
.h 文件部分代码
#import \"XMFTPServer.h\"@interface FTPManager : NSObject/*** 服务器ftpServer;*/@property (nonatomic, strong) XMFTPServer *ftpServer;/*** 是否有用户连接*/@property (nonatomic, assign) BOOL isLink;/*** 创建ftpServer管理类单例*/+ (instancetype)sharedManager;/*** 主动断开链接*/- (void)disconnect;/*** 开放端口*/- (void)portDispark;@end
.m 文件部分代码
@implementation FTPManager/** */+ (instancetype)sharedManager {static FTPManager *_ftpManager = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_ftpManager = [[FTPManager alloc] init];});return _ftpManager;}/** 主动断开链接 */- (void)disconnect {[self.ftpServer stopFtpServer];self.isLink = NO;}/** 开放端口,监听ftp用户 */- (void)portDispark {//默认开放端口为20000unsigned ftpPort = 20000;NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];self.ftpServer = [[XMFTPServer alloc] initWithPort:ftpPort withDir:basePath notifyObject:self];NSLog(@\"FTP服务器地址:%@\", [NSString stringWithFormat:@\"ftp://%@:%u\", [ManagerTool getIPAddress],ftpPort]);}/** 监听登录用户 */- (void)currentUserLogin {self.isLink = YES;NSLog(@\"有FTP用户登录进来了\");}@end
由于开放FTP需要设置账户、密码, 需要在XMFTPServer源文件作出修改。
XMFTPConnection.m中需要做修改, 修改代码如下
-(void)doUser:(id)sender arguments:(NSArray*)arguments{// send out confirmation message -- 331 password required forif ( currentUser != nil )currentUser = [NSString new];currentUser = [arguments objectAtIndex:1];NSString *outputString = [[NSString alloc] init];if([[arguments objectAtIndex:1] isEqualToString:@\"用户名\"]){outputString = [ NSString stringWithFormat:@\"331 Password required for %@\", currentUser ];[[NSNotificationCenter defaultCenter] postNotificationName:@\"currentUserLogin\" object:nil];}else{outputString = @\"530 Invalid username\\n\";}[ sender sendMessage:outputString];}
-(void)doPass:(id)sender arguments:(NSArray*)arguments{NSString *pass = [ arguments objectAtIndex:1 ];NSString *outputString = [[NSString alloc] init];if([pass isEqualToString:@\"密码\"]){outputString = [ NSString stringWithFormat:@\"230 User %@ logged in.\", currentUser ];}else{outputString = @\"500 Invalid username or password\\n\";}[ sender sendMessage:outputString];}
基本实现iOS开放设置携带用户名、密码的服务,其他设备可访问移动端本地文件。