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。
