笔者最近在实现app上一个通过ftp协议与电脑端共享文件的功能。
这里附上使用的第三方开源代码的连接,以节省读者的时间。
https://github.com/loleh43/ios-ftp-server
里面的demo其实是比较简单的。其实,就是利用该类库,在iPhone上开启ftp服务器,然后通过"我的电脑"地址栏输入ip进行访问
但是,开始的时候由于粗心了,自己按照原作者的思路写了个demo,发现电脑端一直访问不了。
仔细断点调试了一番,才发现是导入文件的时候没把东西导入完全。
大家使用这个类库的时候,记得把也导入进去,缺失了这个文件,电脑端可是无法访问你的app沙盒的。因为这个文件不在class文件夹中,所以往往会被后来者忽略掉。
导入运行所需的框架,在你想要开启ftp服务器的controller中声明ftpServer.h
还有一点是需要注意的。该类库是基于mrc的,而现在开发大部分人都是基于arc的,这种情况就涉及到了mrc和arc的混用了。
在target的build phase -> compile Sources 中找到对应的文件,并且添加compiler flags
如图所示
还有比较重要的一点便是,如果你的app中已经使用了CocoaAsyncsocket 实现即时聊天功能,那么你的app socket环境是相对复杂的,会出现一个小bug,当你开启ftpServer时,电脑端连接上手机,而断开服务时,刷新地址栏,你的连接socket依然存在着。
这是因为在不同的文件里,调用了相同的Asyncsocket中的方法。导致连接socket无法释放。
解决方案:
将ftpServer单例化,并添加一个bool变量用于判断是否应该连接。 在ftpConnection中声明ftpServer,并在相应的委托方法中,通过ftpServer的bool变量来限制方法的执行,以免重复创建链接socket。
如有错误之处,还请指出,谢谢。