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实现电脑和手机间数据传输的技术方案研究的更多相关文章

  1. 【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错

    原文网址:http://blog.csdn.net/xiaanming/article/details/14450809 转载请注明出处:http://blog.csdn.net/xiaanming/ ...

  2. 使用adb在电脑和手机间传文件

    首先须要root手机. 然后,"Win + R",打开cmd窗体.以下以copy d:\1.txt到/system/文件夹为例说明. adb push source(localpa ...

  3. android 基于wifi模块通信开发

    这篇文章主要是我写完手机与wifi模块通信后所用来总结编写过程的文章,下面,我分几点来说一下编写的大概流程. 一.拉出按钮控件并设置它的点击事件 二.设置wifi权限 三.打开和关闭wifi 四.扫描 ...

  4. Android 基于google Zxing实现对手机中的二维码进行扫描

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的 ...

  5. Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处:http://blog.csdn.net/xiaanming/article/detail ...

  6. 【转】Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果--不错

    原文网址:http://blog.csdn.net/xiaanming/article/details/10163203 转载请注明出处:http://blog.csdn.net/xiaanming/ ...

  7. 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网

    1.以管理员身份运行命令提示符:快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡:运行命令:netsh wlan set hostednetwork mode=allow ssid= ...

  8. WIN7使用技巧 让电脑变身WiFi热点,让手机、笔记本共享上网,如何开启无线网络,共享无线网络

    将win7电脑变身WIFI热点,让手机.笔记本共享上网 用win7建立无线局域网,可以共享上网可以局域网游戏. 开启windows 7的隐藏功能:虚拟WIFI和SoftAP(即虚拟无线AP),就可以让 ...

  9. Android手机间使用socket进行文件互传实例

    这是一个Android手机间文件传输的例子,两个手机同时装上此app,然后输入接收端的ip,选择文件,可以多选,点确定,就发送到另一个手机,一个简单快捷文件快传实例.可以直接运用到项目中. 下面是文件 ...

随机推荐

  1. http://msh.baidu.com/UTWpR6wY4722

    超人的计算机专业应届研究生个人简历,但企业不需要 前几天和一位做人力资源的朋友在饭店里面喝酒,聊起来大学生找工作不好找的话题.我的这个朋友对这个还真比较感兴趣,说着说着从公文包里拿出来一份简历递给我看 ...

  2. mybati的存储过程

    这里我就以的存储过程为例,大家一起学习一下,

  3. wed网页开发面试笔试必备小知识

    HTML中行内元素与块级元素的区别: 在标准文档流里面,块级元素具有以下特点: ①总是在新行上开始,占据一整行: ②高度,行高以及外边距和内边距都可控制: ③宽带始终是与浏览器宽度一样,与内容无关: ...

  4. JS正则验证格式

    function test() { var temp = document.getElementById("text1"); //对电子邮件的验证 var myreg = /^([ ...

  5. angularjs中关于ng-if的一些理论

    ng-if简介: ● 使用ng-if指令可以完全根据表达式的值在DOM中生成或移除一个元素.如果赋值给ng-if 的表达式的值是false,那对应的元素将会从DOM中移除,否则对应元素的一个克隆将被重 ...

  6. 【原创】Freak3D printer 的Repetier-Host 的设置

    软件版本号:Repetier-Host 版本号 1.6.1 操作系统: win10 x64 专业版 3d打印机: Freak3D: 1. freak3D的相关参数(通过freak3D的官方打印文件得到 ...

  7. Linux下添加磁盘创建lvm分区

    shell> fdisk /dev/xvdb #### 选择磁盘 Command (m for help): m #### 帮助 Command action a toggle a bootab ...

  8. PHP扩展开发(3)-config.m4

    1. 宏命令 1.1. dnl 注释      1.2. 扩展的工作方式           1.2.1) PHP_ARG_WITH不需要第三方库           1.2.2) PHP_ARG_E ...

  9. k-means均值聚类算法(转)

    4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时候上述条件得不到满足,尤其是在 ...

  10. dll signing issue

    1. Verify if a dll has been signed sn.exe -v module.dll Scenario: sometimes for security reasons, a ...