Android基于WIFI实现电脑和手机间数据传输的技术方案研究
Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案:
一种是通过ftp协议实现,Android手机作为数据传输过程中的ftp服务器;
一种是通过http协议实现。Android手机作为数据传输过程中的http服务器。
所以,技术实现的难点在于我们的app怎么实现ftp或者http服务器的功能,当然可以自己先阅读ftp协议或者http协议,根据规范自己实现一个,如果你时间充裕、技术过关的话;另一种方法是寻求开源社区的帮助,本文重点通过分析市场上已有的几款实现wifi数据传输的apps,来说明开源ftp或者http服务器的选型。
【百度文库】
新版的百度文库实现了wifi无线传输功能,界面如左下图所示,可以看到它是通过ftp协议实现的。在PC端“我的电脑”地址栏输入ftp地址,就可以访问手机上的文件了,界面如右下图所示,可以看到这是一个ftp虚拟目录,结构组织良好。同时,由于文库的ftp传输功能是在一个Service中启动的,因此,在进行文件传书时,不需要停留在这个界面,可以在文件传书的同时使用这个app的其他功能。

通过分析可知,百度文库是基于开源ftp服务器Colorado FTP来实现wifi无线数据传输的。
Colorado FTP是一个Java实现的FTP服务器,具有快速、可靠和可扩展等优点,完全兼容RFC 959和RFC3659,但是由于Colorado FTP不是专门为Android设备定制的,所以如果在Android设备上使用的话,需要花费一定的工作量进行技术改造。项目地址是:http://cftp.coldcore.com/index.html,遵循LGPL协议,所以商用软件可以放心使用;
【Anyview】/ 【多看阅读】
这两款apps同样是基于ftp实现的无线传书,之所以将它们放在一块,是因为它们都采用了相同的技术方案,界面如下图所示。这两款apps在进行文件传书时,只能停留在文件传输界面,只要退出这个界面,ftp连接就中断了,比较不友好,同时,在“我的电脑”地址栏输入ftp地址连接成功后,默认进入的是手机sdcard的根目录,没有自定义ftp虚拟目录。


通过分析可知,这两款apps都使用了swiftp来实现ftp服务器的功能。
swiftp是专门为Android设备定制的开源FTP服务器,集成到自己的app中很容易。项目地址是:
https://github.com/ppareit/swiftp,遵循GPL协议,该协议被普遍认为是“有传染性”的“病毒”,因为如果你的app中使用了遵循该协议的开源代码,那么你的整个app的代码也必须开源出来。可见,anyview和多看阅读这两款apps的开发者们,没怎么弄明白就使用了swiftp,好在中国目前在开源这块不怎么与世界接轨,小公司直接使用遵循GPL协议的开源代码还是可以无所顾虑的。
【ftp数据传输总结】
基于ftp协议实现无线传输功能,基本原理就是移植一个开源的ftp服务器到Android设备上,再集成到自己的app中。所以关键在于开源ftp服务器的选取,还见过有点app使用Apache FtpServer,Apache FtpServer是纯Java实现ftp服务,是一个完整和可移植的FTP服务器引擎解决方案,它基于著名的mina框架实现底层的网络操作。项目地址:http://mina.apache.org/ftpserver-project/index.html,但貌似这个项目需要集成较多的第三方jar包,会使得最终apk的大小更大,所以不建议使用。
综合考虑:1)遵循的开源协议;2)集成的难度;3)集成后带来的apk体积的膨胀;建议使用Colorado FTP。
【金山共享精灵】
貌似这个app很久没更新了,估计是项目被停掉了,但它的实现方案还是可以参考下,基于http协议实现的无线传输,在PC端浏览器中输入http地址后,界面如下图所示。这个web界面应该是有专门的FE工程师来实现的,在这里可以很方便的对手机的SD卡进行操作,UI方面做得还是很不错的。

通过分析可知,金山共享精灵使用Jetty作为http服务器和Servlet容器,不过使用的是Jetty的codehaus分支。Codehaus分支的Jetty可从下面的地址找到:http://docs.codehaus.org/display/JETTY/Downloading+Jetty 。
Jetty遵循两个开源协议: Apache Licence 2.0和 Eclipse Public License 1.0。商用软件可以随意的使用。
【虚拟数据线】
这个app同时实现了ftp和http两种方式的无线数据传输,它的ftp方式基于swiftp实现,这里只介绍下http方式的实现。在PC端浏览器输入http地址后,界面如下所示:

虚拟数据线同样使用Jetty作为http服务器,不过使用的是Jetty的eclipse分支,项目地址是:
http://www.eclipse.org/jetty/。
【http数据传输总结】
基于http协议实现的无线数据传输,基本原理是在移植一个开源的http服务器到Android设备上,在进行数据传输前,启动该http服务器,并根据需要实现自己的web界面及相应的功能,这方面可能需要FE工程师的介入。如果确实需要使用http方式的话,可以考虑使用jetty。
Android基于WIFI实现电脑和手机间数据传输的技术方案研究的更多相关文章
- 【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/14450809 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- 使用adb在电脑和手机间传文件
首先须要root手机. 然后,"Win + R",打开cmd窗体.以下以copy d:\1.txt到/system/文件夹为例说明. adb push source(localpa ...
- android 基于wifi模块通信开发
这篇文章主要是我写完手机与wifi模块通信后所用来总结编写过程的文章,下面,我分几点来说一下编写的大概流程. 一.拉出按钮控件并设置它的点击事件 二.设置wifi权限 三.打开和关闭wifi 四.扫描 ...
- Android 基于google Zxing实现对手机中的二维码进行扫描
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的 ...
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处:http://blog.csdn.net/xiaanming/article/detail ...
- 【转】Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/10163203 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
1.以管理员身份运行命令提示符:快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡:运行命令:netsh wlan set hostednetwork mode=allow ssid= ...
- WIN7使用技巧 让电脑变身WiFi热点,让手机、笔记本共享上网,如何开启无线网络,共享无线网络
将win7电脑变身WIFI热点,让手机.笔记本共享上网 用win7建立无线局域网,可以共享上网可以局域网游戏. 开启windows 7的隐藏功能:虚拟WIFI和SoftAP(即虚拟无线AP),就可以让 ...
- Android手机间使用socket进行文件互传实例
这是一个Android手机间文件传输的例子,两个手机同时装上此app,然后输入接收端的ip,选择文件,可以多选,点确定,就发送到另一个手机,一个简单快捷文件快传实例.可以直接运用到项目中. 下面是文件 ...
随机推荐
- LSI SAS 2308配置操作
介绍LSISAS2308的配置操作 3.1 登录CU界面 介绍登录LSISAS2308的CU配置界面的方法. 3.2 创建RAID 介绍在LSISAS2308扣卡上创建RAID的操作方法. 3.3 配 ...
- .net I/O操作 导图
稍微总结下,System.IO提供了四种类型来实现,对单个文件和计算机目录结构的操作.Directory和File通过静态成员实现建立.删除.复制和移动操作(上图没有提及).而FileInfo和Dir ...
- web前端之文件上传
前言 最近太忙一直没时间认真的写博客(哈哈哈),最近pm提一个需求,移动端需要一个上传图片的功能,允许多选.删除.预览.点击查看大图并可以滑动.虽然听起来很多,但是这个功能在web上实现过啊,使用we ...
- 10个最实用的Linux命令
收集了一些对于Linux新手最基本但最有用的Linux命令.你完全可以键入这些命令来管理你的服务器.这些命令对于学习vps或服务器管理的新手最为简便.1.List命令 ls -a //列出所有文件 l ...
- 32位PLSQL_Developer连接oracle11g_64位
1. 请将你下载的instantclient-basic-win32-10.2.0.5 文件解压.然后复制到你的数据库安装的文件夹下的producti文件夹下,我的是: E:\app\Administ ...
- JDK6和JDK7中的substring()方法
substring(int beginIndex, int endIndex)在JDK6与JDK7中的实现方式不一样,理解他们的差异有助于更好的使用它们.为了简单起见,下面所说的substring() ...
- const的重载
class A { private: int a; public: A(int x) :a(x){}//构造函数并不能重载 void display(){ cout << "no ...
- A Simple Math Problem(HDU 1757 构造矩阵)
If x < 10 f(x) = x.If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-1 ...
- HTML5实现的视频播放器01
HTML5实现的视频播放器 什么是hivideo? 最近一段时间在使用PhoneGap开发一个App应用,App需要播放视频,本想直接使用html5的video,但使用它在全屏播放时不支持横屏播放 ...
- sql语句读取所有父子标签
select A.HOSPITAL_ID from T_HOSPITAL A connect by prior A.HOSPITAL_ID=A.PARENT_ID start with A.HOSPI ...