APP下载

基于android平台的手机远程文件管理和控制系统研究

2019-05-22潘丽华王莉莉

电脑知识与技术 2019年10期
关键词:Android平台远程控制

潘丽华 王莉莉

摘要:该文介绍了使用无线局域网和SOCKET套接字技术,利用 JAVA( Eclipse Android SDK平台)和 C++( Visual Studio2010平台),完成了Android手机与 Windows平台之间的文件互传、文件浏览,Android手机远程控制计算机的键盘输入、音量控制、远程关机等功能的实现。

关键词:Android平台;远程控制;文件传输

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2019)10-0065-03

开放科学(资源服务)标识码(OSID):

1 系统需求分析

系统使用C/S结构并使用TCP协议进行通信。Android手机作为客户端,电脑作为服务器。手机端采用Java语言在Eclipse平台上进行开发。计算机端控制部分在Visual Studio 2010上使用C ++语言进行开发,其余部分也使用Java实现。

该软件主要完成Android手机与计算机之间文件互传、文件浏览、对计算机进行简易控制。软件在开发时应考虑界面簡洁、操作简单,同时要使数据传输效率高、保证数据传输的完整性、安全性。综合以上特征,对本系统的具体要求如下。

1.1 手机连接计算机的认证机制

计算机端的服务程序在某个端口监听,等待手机的连接,手机连接时,通过认证后才能完成后续操作。在手机端应保存认证信息,用户只需在第一连接时需要提供认证信息,在以后的使用过程中手机端程序会读取认证信息自动完成认证过程。

1.2数据传输完整性和安全控制机制

由于采用无线局域网(WI-FI)技术进行数据传输,在数据传输的过程中可能出现丢包现象,因此必须提供一种保证数据完整性的机制。同时考虑到数据盗窃无线数据传输的可能性,传输的数据需要加密。也就是说,需要传输的数据在数据传输的两端都被加密。

1.3 文件互传

在手机端提供一个浏览手机中文件的界面即文件浏览功能,同时在Android手机端中提供一个浏览所连接的计算机硬盘中文件的界面。用户在浏览手机中文件时,提供一个长按菜单( ContextMenu,即上下文菜单)供用户选择“复制”“剪切”等操作,当用户按下“复制”后,切换到浏览计算机文件界面,按下“粘贴”即完成手机文件到计算机的传输。计算机中文件到手机的传输与此类似。

1.4 简易控制

控制功能包括控制计算机的键盘输入、音量控制、关机操作。

2 系统总体设计

根据需求分析,该系统分为两大部分。第一部分是计算机的服务器端(以下简称计算机端)。第二部分是Android手机客户端(以下简称移动终端)。这两部分从功能模块上来分析都是相对的,即手机端的每一个操作都将作为一个请求发送到计算机端,计算机端对该请求作出响应。下面具体说明两大部分的模块划分。

2.1 手机端

根据需求分析,将其分为连接认证模块,简单控制模块,文件传输模块,数据验证加密解密模块,网络操作模块五个模块。

各模块的功能简介:

l 连接认证模块。为移动终端提供安全的身份验证机制以连接到计算机。

l 简易控制模块。封装控制所有的控制命令,供用户界面(Activity)调用。

l 文件互传模块。封装文件发送和接收的函数,供用户界面调用。

l 数据验证加密解密模块。封装CRC32编码解码函数,封装DES(Data Encryption Standard)加密算法。

l 网络操作模块。封装网络客户端,服务器端创建功能,数据接收和发送功能。

2.2 PC机端

与手机端对应的分为五大模块。因为具体实现控制的代码是使用C++编写的,故比手机端多出一个C++实现控制操作模块。实际控制模块中封装了音量控制、键盘、关机的具体实现。

文件传输模块,数据验证解密模块和网络操作封装模块可以在移动电话终端和计算机终端之间共享。如此划分模块能一定程度上使整个系统实现高内聚、低耦合。系统总体架构如图1所示。

3 系统功能的设计与实现

该系统的实现包括移动终端程序和计算机终端程序两部分。计算机充当服务器,手机充当客户端。采用无线局域网WIFI技术,实现JAVA SOCKET编程通信。

3.1 手机端设计与实现

1)操作界面设计

操作界面是人机交互的接口,在Android中是通过Activity来承载操作界面,其功能类似于Windows操作系统的窗口。

手机端的界面包括手机文件浏览界面、计算机文件浏览界面、手机控制计算机界面。考虑到手机文件浏览界面和计算机文件浏览界面除了显示的内容不同之外,其显示方式、操作菜单等都一样。因此可以使用Fragment来实现共用一个界面,通过设计两个RadioButton按钮来实现界面的切换。在MainActivity中动态的加载两个Fragment来显示手机文件浏览界面、计算机文件浏览界面。MainActivity的界面定义在main.xml中,根节点采用LinearLayout(线性)布局,在其内部定义一个FrameLayout和一个包裹两个RadioButton的RadioGruop构成。FrameLayout作为显示文件的区域,RadioButton用来切换界面。

由于 MainActivity要动态加载两个 Fragment,因此使其继承 FragmentActivity,在其中定义一个成员变量 List[Fragment] fragments用来存放各个两个可切换界面即手机文件浏览、计算机文件浏览界面。在MainActivity创建时完成这两个Fragment类实例的创建和初始化。

程序在模拟器上运行的初始界面如图2所示。

3.2 各功能模块的设计

3.2.1网络操作模块(手机,电脑共享模块)

如图1(系统总体架构图)所示,该模块处于整个系统的最底层,为上层模块提供了基础的网络传输服务,实际上该模块是对 Java的网络操作类进行再次封装。该模块在NetUtil类中实现。

首先在DataPackage类中定义数据包结构,每次通过网络发送接收的数据都将用该结构来存储。TCP协议是流式协议,发送端不管是一次发送还是多次发送,对于接收端来说都是一样的,因此,有必要定义一个数据包单位来指定每次发送数据的大小。接收端会检查结构中的dataLength字段,根据该字段来确定将接收多长的数据。类中定义对外接口如下:

1) public boolean connectSvr(String svrIP,int svrPort)

该方法用于连接服务端,在连接完成后创建一个线程用于接收数据。同时在这个接收数据的线程中调用一个方法recvDataPackage,只要在NetUtil的子类中重写该抽象方法,当网络中有数据到达端口时将回调该方法。

2) private boolean createSvr(int listenPort)

該方法用于创建一个服务端并监听端口。在循环结构中,它会持续检测是否存在连接,并在存在连接时创建一个线程函数来处理连接。在这个线程函数中调用一个方法doSomething,其子类只需重写该方法即可处理有连接到来时的所有实现。该过程与connctSvr方法类似,都是只在该类中定义好处理网络连接、数据到来事件的回调接口,在子类中实现具体的处理。

3) private int sendDataPackage(DataPackage dataPackage)

该方法用于发送指定数据包。其实现方法是调用网络输出流的写入方法。

3.2.2数据验证加密解密模块(移动终端,计算机端通用模块)

该模块完成数据包验证,加密解密的功能,该模块在DataPre类中实现。

类中定义对外接口如下:

public byte[] codeValidate(byte[] data);对数据包进行验证编码。

public boolean decodeValidate(byte[] data);对接收的数据完成验证。

public byte[] encrypt(byte[] data);完成数据包的加密

public byte[] decrypt(byte[] data);完成数据包的解密

其中验证数据采用的CRC32编码和解码,在java提供的工具类java.util.zip.CRC32能实现CRC32编码解码的方法。每次数据的接收都检测数据包的检验码,如果出错则通过网络模块发送命令通知发送端重发数据。加密解密采用DES加密算法。DES加密解密算法的实现可以借助于java.secrity包、javax.crypto包内提供的类来实现。

3.2.3文件互传模块

该模块完成文件的发送、接收,该模块在FileUtil类中实现。FileUtil类继承自NetUtil,借助NetUtil类提供的网络发送、接收函数来实现文件的传输。同时在类中实例化了一个DataPre类,用于数据验证和加密解密。类中定义对外接口如下:

1) public static boolean sendFile(String sendFileName)

该方法用于发送文件。

2) public static boolean recvFile(String recvPath)

该方法用于文件的接收,其接收过程与发送过程是保持同步的,发送函数先发送文件的 md5编码,接收函数相应的接收该编码,并作为检验文件是否接收完成的标志,在传输完成后,在通过 md5编码又可以检测文件的完整性。因此,在发送文件的过程中,使用了两套方法来确保数据的完整性。

3.2.4简易控制模块

该模块完成移动终端控制和控制命令的生成和传输。该模块根据用户在用户界面上的操作生成不同的控制命令,然后调用网络模块中的方法将命令发送给计算机端。该模块在ControlUtil类中实现,该类继承了NetUtil类。首先要定一个包含所有操作命令的数据结构CmdCode,定义如下:

class CmdCode{

public static final int SHUTDOWN_COMPUTER=0;//关机命令

public static final int ADJUST_VOLUMN=1;//声音调节命令

...//其他定义 }

该模块中定义的对外接口如下:

1) public static DataPackage createCtrolCmd(CmdCode cmdCode)

生成控制命令。如当用户在界面上按下关机按钮时,调用该方法将生成一个控制关机的数据包。调用方式如,createCtrolCmd(cmdCode),在cmdCode中包含了具体的命令信息,该函数将其封装为数据包。

2) public static boolean sendCmd(DataPackage cmdPackage)

发送控制命令。通过网络模块发送createCtrolCmd封装的命令包。

3.2.5 连接认证模块

该模块完成连接计时算机的认证。其实现在AuthHelpCli类中,该类同样是继承自NetUtil类。该类中对外提供一个方法:boolean sendAuthInfo(String userName, String psdMd5);即将用户名和进行了md5加密算法的密码发送给计算机端,如果计算机认证通过则返回真,否则返回假。通过身份验证后,您可以浏览计算机上的文件并在界面上控制计算机。

3.3 计算机端的设计与实现

由于移动终端和计算机共有三个模块(网络操作模块,数据验证加密解密模块和文件传输模块),因此,只需要设计连接认证模块,简单控制模块和C ++开发的实际控制命令实现模块。其中,使用C++语言在Visual Studio平台上实现的动态链接库是实现手机控制计算机的关键。

3.3.1认证模块

该模块完成对手机连接请求的认证,需要手机提供正确的用户名、密码。如果认证失败将断开连接。该模块在AuthHelpSvr类中实现,AuthHelpSvr继承自NetUtil类,在该模块中只实现了一个方法:

public static boolean checkLogin(String userName, String password);

3.3.2简易控制模块

解析手机发出的控制命令,然后调用实际的控制功能。在该模块中实现了一个方法:

1) public static boolean sendCmdToJni(String cmd);

根据收到的命令参数cmd,在jni模式下调用动态链接库中的控制功能。

3.3.3实际控制操作实现模块

该模块是完成控制功能的核心。该模块使用C++语言调用Win32 API实现。下面介绍其实现。

1)音量控制

在Windows API中提供了可以控制音量的接口函数。使用auxGetNumDevs()函数获取系统安装的声卡数量。如果返回0,则表示当前系统中没有声卡或发生错误。可以通過使用 auxGetVolum(UINT uDeviceID, LPWORD lpdwVolumn)函数获取音量。通过auxSetVolumn(UINT uDeviceID, DWORD dwVolumn)来设置音量。

据此,bool setVolumn(int volumn)函数可以封装在模块中,volume是卷参数,取值范围是0-100,int getVolumn()取得卷,返回卷值。

2) 键盘控制

在Windows API中提供一个控制键盘的函数keybd_event。其函数原型为:

VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);

通过使用这个API函数即可实现键盘控制功能。

3) 关机

Windows提供了一个关闭,注销和重新启动ExitWindowsEx函数的API。

4 结束语

本文根据实际应用需要,设计了一款简易、高效的手机文件管理系统。该程序能使用户方便地使用手机浏览并拷贝计算机中的文件,将手机文件拷贝到计算机中,完成简单的控制。运用Android技术解决了开发过程中遇到的各种技术难题,也为其他基于Android系统平台的开发提供了借鉴和参考。

参考文献:

[1] 李宁.Android开发权威指南[M].北京:人民邮电出版社,2011(9):239-240.

[2] 陈璟,陈平华,李文亮.Android内核分析[J].现代计算机:专业版,2009(11).

[3] 杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010:49-97.

[4] 邓凡平.深入理解Android卷I[M].北京:机械工业出版社,2011.

[5] 熊刚.基于Android的智能手机的设计与实现[D]. 武汉:武汉理工大学.2010.

[6] 罗伟.基于Android平台的即时通讯系统的研究与实现[D].长沙:湖南师范大学,2009.

[7] 钟明林.基于Android智能手机平台方案[D].济南:山东大学,2010.

【通联编辑:唐一东】

猜你喜欢

Android平台远程控制
基于Android平台软件开发技术研究
基于GSM的远程控制系统