蔡锁德
摘 要: 文件共享作为人们工作学习中最有效的方式之一,但是在网络状况不好甚至是没有网络的时候用户想要共享文件是不能实现的,针对此问题,提出了一个在移动终端上实现的文件共享系统。在本系统中,用户可以自行组织成网络进行文件共享,不必考虑外部的网络环境,通过底层使用Ad Hoc网络,在网络内部使用UDP广播,可实现各节点快速的文件共享。通过无线局域网内部的文件共享实验,证实了该系统的性能不会因为网络中节点数目的增加而下降;通过移动终端节点和服务器节点文件共享的实验,证实不能连接到服务器的节点也可以和服务器实现文件共享,而且与每个节点都要主动和服务器共享文件的情况相比,提高了文件共享的效率。
关键词: 文件共享; Ad Hoc; 可靠广播; 无线局域网
中图分类号: TN911?34; TM417 文献标识码: A 文章编号: 1004?373X(2016)05?0042?05
0 引 言
随着移动互联网的发展以及智能手机的普及,人们的日常生活越来越依赖于移动终端,而文件共享作为一种工作、学习的有效方式,受到大众的普遍欢迎,因此移动终端的文件共享成为网络应用的一个重要方面。现阶段存在的文件共享系统大多数采用如下结构:C/S(客户机/服务器),B/S(浏览器/服务器),P2P(对等网络)等[1]。
虽然在移动终端实现的文件共享系统很多,但是这些系统在网络层使用的网络大部分都是WiFi有AP接入点网络或者蜂窝网络,而且在移动终端之间进行文件共享时大部分都要经过服务器,移动终端向服务器请求下载文件,或者将共享的文件上传到服务器,像比较受欢迎的 dropbox,DBank,Seafile等[2]。
但是在一个没有网络覆盖的环境中,想共享彼此拥有的资源或者是在教室进行考试,只有老师的移动终端设备可以连接到服务器,学生是不容许上网的,而试卷就存储在服务器上;又或者在一个人员比较密集的环境中,大家都想请求服务器上的文件,这类场景的特点是多数用户的设备不能连入网络,而只有少部分用户可以上网,或者是所有用户都不可以上网;另一种情况就是在同一个地方同时向服务器请求同一个资源的用户数较多。很显然现存的移动终端文件共享系统并不能满足上述场景的需求[3]。
针对上述场景,本文提出了一种新思路的文件共享系统。该文件共享系统的目标是使有共享需求的用户可以根据自己的需求自行组织成网络,并可以在该网络内部自由的和其他用户实现文件共享,各用户在网络中的地位相等[4]。
1 系统的设计
1.1 总体设计
文件共享系统涉及到的节点主要分为三类:非联网节点、联网节点和服务器。其中联网节点表示Ad Hoc网络中可以连接到2G/3G/4G网络的节点,非联网节点表示不能接入蜂窝网的节点。设计的目标是实现移动终端下的多用户文件共享。多个移动终端节点可以自行组织成Ad Hoc网络,这些节点可以在网络中自行分享文件,包括图片、视频等;若是该网络中有节点可以连接到服务器,则这个网络中的非联网节点都可以通过该节点和服务器实现文件共享。 FileShare系统的网络拓扑图的一种状态[5],如图1所示。
图1 FileShare网络拓扑图
1.2 系统的运行流程
FileShare文件共享系统在Ad Hoc网络中的运行流程如图2所示,其中节点A,B,C,D均为移动终端节点。FileShare系统的运行流程如下[6]:
(1) 当节点A的共享目录中有变化时,发送文件;
(2) 节点B,C,D确认该文件是有效文件,并接收文件数据包,保存到程序中;
(3) 节点A收到了反馈包,开始发送一定量的冗余数据包;
(4) 节点C,D收到了冗余数据包,并与原有的包整合,解码恢复出原文件,并写到本地共享文件夹中。
从上述的运行流程可知,文件共享系统主要包括以下内容:实时监听并处理共享文件夹中的内容的变化,文件编码管理,发送过程管理,接收过程管理,反馈包监听及管理,本地读写文件等。
图2中的节点可以是非联网节点,也可以是联网节点,它们自行组织成网络进行文件共享。考虑到网络中会存在可以连接到服务器的节点,这样通过联网节点的桥梁作用,就可以实现非联网节点和服务器的间接信息交换和文件共享。本文在调研了Seafile的详细信息后,将本文设计的FileShare 系统与Seafile 软件进行有效结合,以达到上文提到的三类节点可以方便地共享文件的目的。
1.3 可靠广播机制设计
为了加快网络中文件共享的速度及减少网络中的数据量,本文选用了UDP广播技术,并基于UDP的不可靠性,进行了改进,提出了可靠广播机制。本文中广播的可靠性主要依赖于FEC编码机制和反馈重传机制。反馈重传机制的原理:接收方在发生丢包现象时可以和发送方沟通,告诉发送方自己丢包的数量。FEC编码机制的主要思想是根据[n]个文件数据包,编码生成[k]个冗余数据包,而接收方只要收到这[n+k]个中任意[n]个数据包,就可以纠错恢复出原数据。
1.4 模块设计
文件共享系统共分为八大模块,分别为共享文件夹管理模块、文件分块和合并模块、文件编解码模块、发送模块、接收模块、反馈包管理模块、文件读写模块和日志输出模块,各模块之间的关系如图3所示。
(1) 共享文件夹管理模块。在/sdacrd下面新建一个共享文件夹SharedFiles作为所有节点的共享文件夹,同时采用FileObserver对该文件夹及其内容的相关事件如创建、修改、写完后关闭和删除等进行监听,监听的范围包括共享文件夹及其内部的所有子目录和子文件。
(2) 文件分块、合并模块。对大文件分块,小文件合并的方法。要将大文件分块发送,总的来说就是分为两层发送,首先将文件分成固定大小的文件块,最后一块大小可以不固定,然后逐块发送。在每块发送的过程中考虑到UDP发送的机制,将一块数据分成固定大小的文件数据包在UDP中广播。
(3) 文件编解码模块。对于大文件来说文件要进行分块,小文件是合并后分块发送的,所以文件的编解码是以文件包为单位进行的。
(4) 发送模块。待发送的文件要先放入发送队列,当发送队列满足一定的条件时,队列中的文件才会被发送。使用Ad Hoc网络,节点的IP地址在移动终端启动Ad Hoc模式时已经指定。
(5) 接收模块。接收模块作为一个单独的线程在程序运行时就会开启,直到程序运行结束,才会关闭该线程。
(6) 文件读/写模块。本系统的主要功能是实现文件共享,系统中对本地文件的读/写非常频繁。采用类似Java自带的读取文件类FileInputStream和BufferedInputStream,文件读取一般采用顺序读取的方式,将一定大小的二进制数据放到文件数据包中,函数为read(data,0,block_length)。
(7) 反馈包管理模块。反馈包的作用就是通知发送者本节点的丢包情况。UDPpacket的发送都是采用广播的方式,所以对于其他节点发送的反馈包,节点都可以收到,并保存到其他节点反馈包列表中。
(8) 日志输出模块。日志输出模块主要记录系统运行时的各种信息,包括共享文件的信息,发送、接收过程中产生的数据信息,控制信息,编解码信息等。系统将这些信息写到日志文件中,以便系统的调试和后续做实验时的记录。在该系统中各个模块之间有相互调用的关系。
1.5 数据库设计
系统采用的数据库是Android自带的数据库SQLite。数据库的相关操作如创建、打开、删除数据库以及创建、删除、添加、查询数据表等,均是利用Android数据库帮助类SQLiteOpenHelper实现的。系统在发送信息时采用的是UDP广播的方式,以提高发送效率,减少发送方的重传次数以及发送多类不同的信息,方便彼此之间通信。
2 系统实现
系统使用了Seafile服务器和其部分代码,使得非联网节点可以通过联网节点和服务器实现文件共享。在Ad Hoc网络内部实现文件共享时,完全使用的是FileShare系统提供的功能。当节点要和服务器通信时,主要使用的是Seafile的功能。两个软件结合后形成的新系统可以实现非联网节点、联网节点和服务器的文件共享和全网同步,而且系统中加入服务器后,可将多个Ad Hoc网络连接成一个大的网络。
加入服务器节点后,网络中的联网节点作为中转节点,负责非联网节点和服务器的通信,非联网节点可以通过它将文件上传到服务器,或者从服务器下载文件。在实现全网同步的过程中,联网节点的操作步骤和非联网节点是有差别的。
图4(a)是文件共享系统FileShare的主界面,该程序运行时就会自动对共享文件夹进行监控,所以界面只设计了两个按钮,同步和停止。同步按钮用于实现本节点与联网节点的同步功能;图4(b)是192.168.1.12这个节点在共享大文件时(指定大于100 KB文件为大文件)的界面图,界面主要显示了共享过程信息。图4(c)是192.168.1.17这个节点接收大文件的示意图,界面主要显示了接收过程信息,包括收到文件每个块的数据包数量、发送反馈包、接收数据包、写文件到本地、接收文件的时间等。图4(d)是节点发送小文件的界面图,和发送大文件不同的是文件不需要分块,只有一块且首次发送的数据包小于100个。
3 功能测试及实验结果分析
在实验过程中用到的实验设备为多台Intel手机和一台Seafile服务器。其中Intel手机的参数为:型号为Intel mfld_pr3、操作系统为Android4.04、内核版本为3.08、网络接口为Ad Hoc、手机内存为1 GB。
3.1 Ad Hoc网络内部文件共享实验
实验中选定了多个大小不同的文件作为共享文件,这些文件的大小分别是10 B,100 B,1 KB,100 KB,200 KB,500 KB,1 MB,4 MB和10 MB。
3.1.1 Ad Hoc网络中一个节点主动共享文件实验
实验中主动共享文件的节点只有一个,其他节点只负责接收文件和反馈相应的文件包丢失信息。具体的操作步骤是:多个Intel手机安装程序FileShare;然后选定其中一个手机节点作为主动共享文件的节点,该节点在共享文件夹中放入不同的文件,其他节点不做任何操作;当其他节点接收文件成功后,记录下各文件花费的时间。在该实验的过程中,将网络中的节点数量设为2个,3个,4个,6个,分别做了对比实验,接收文件花费的时间如图5所示。
图5 单节点共享文件,多节点接收花费时间图
通过上述实验,一方面验证了本系统的功能,包括对共享文件夹的监听,文件夹内不同操作触发的不同事件的处理、发送、接收过程以及反馈包的管理等。另一方面,从图5中可以看到,节点在发送不同大小的文件时,从几B到10 MB,系统均运行正常,从曲线可以看出,接收时间是随着文件大小变化而变化的;而且一个节点在共享不同文件时,网络中节点数量为2个,3个,4个和6个的接收时间曲线几乎是重合的。这就说明在本系统中当Ad Hoc网络中主动共享文件的节点数量是一个时,各节点接收文件的时间并不会随着网络中总节点个数的增加而增大。
3.1.2 Ad Hoc网络中节点数量固定,增加主动共享文件节点数量实验
本实验中设定网络中总节点数量为固定值4个,当主动共享文件的节点数不同时分别做实验,测试节点接收不同文件花费的时间,具体实验数据不再列出,直接制成图6进行分析。
从图6可以看到,当网络中的节点固定,主动共享文件的节点不同时,共享同一个文件所花费的时间不同。根据实验过程分析得出,多个节点同时共享文件时,由于网络中各个节点是平等的,每一个节点占用的带宽大体是一样的,这就导致多个文件几乎在同一时间收到。所以当网络中有多个节点发送文件时,接收节点在收到第一个文件时,几乎同时会收到第二个,第三个文件。
3.2 手机节点与服务器文件共享实验
3.2.1 非联网节点上传文件到服务器实验
非联网节点通过联网节点将文件上传到服务器,并记录整个过程产生的数据。实验的具体过程如下:A在自己本地的共享文件夹中放入新文件共享,另外两个节点收到文件后记录接收文件花费的时间,并判断该节点是否可以连接到服务器,如果可以,则该节点向服务器发送文件,服务器接收成功后,会将接收文件的时间返回给联网节点,联网节点将其记录下来。如图7所示为非联网节点共享不同大小的文件时,不同节点(非联网节点、联网节点、服务器)接收不同文件花费的时间。通过实验,证明本系统实现了非联网节点将文件上传到服务器的功能,在一定程度上提高了文件共享的效率。
3.2.2 非联网节点获取服务器文件实验
联网节点从服务器下载文件,然后传送给非联网节点,并记录整个过程中产生的数据。实验的具体过程如下:联网节点从服务器下载文件,记录下载的时间,并将该文件在Ad Hoc网络内广播,其他节点在收到文件后,记录接收的时间。联网节点从服务器下载不同文件,并传送给非联网节点花费的时间图,如图8所示。
从图8中可以看到当文件从联网节点传送到非联网节点时,花费的时间同上一节实验中统计出的数据并没有太大的差距。该文件共享系统不仅使非联网节点可以和服务器进行文件共享,而且在一定程度上提高了文件共享的效率。
4 结 论
首先通过对现存的移动终端间的文件共享系统调研,指出普通的移动终端文件共享系统,大部分需要节点连接到Internet,其本质还是移动终端通过网络与服务器的节点进行文件共享。共享文件的发送节点和接收节点之间并不进行直接的通信,只能通过服务器实现文件共享。这种集中式的,必须有服务器节点的文件共享系统,在有些现实生活中的场景中并不能满足用户对文件共享的需求。针对这类场景,提出了新型移动终端的文件共享系统FileShare,该文件共享系统主要解决密集环境中用户同时请求服务器的问题和用户在无网络环境中彼此共享文件的问题。在没有网络的环境中,节点可以自行组织成网络,利用该系统在网络内部实现文件共享;如果是多个用户在同一个地方同时想要请求服务器上的文件,该系统可以在网络中选择一个较好的节点,让其从服务器获取文件,然后在网络内部将文件分发给其他节点,这样既可以解决网络拥堵的问题,又为用户节省了流量。
参考文献
[1] 蔡自兴,徐光祐.人工智能及其应用[M].北京:清华大学出版社,2010:30?38.
[2] 姜乐水.浅谈无线局域网(WLAN)技术[J].信息技术与信息化,2012(5):64?67.
[3] 舒炎泰,张连芳.无线局域网络的优化设计与管理[J].计算机应用研究,2003,16(3):123?126.
[4] 孙成丹,彭木根.近场通信技术(1)[J].中兴通讯技术,2013,19(4):63?66.
[5] 李勇,黄均才,王凤碧,等.Ad Hoc网络体系结构研究[J].计算机应用,2005,25(1):163?165.
[6] 王辉,单剑锋,俞能海.一种新的无线Ad Hoc网络中的多路径路由及流量分配算法[J].中国科学技术大学学报,2009,39(2):125?131.