刘 源,李翔宇,吴 迪,曹路圆,涂 猛
(1.北京机械工业自动化研究所,北京 100120;2.机械科学研究总院,北京 100044)
基于Android的客户端与服务器的通讯架构设计
刘源1,李翔宇2,吴迪1,曹路圆1,涂猛1
(1.北京机械工业自动化研究所,北京 100120;2.机械科学研究总院,北京 100044)
移动办公正在逐渐改变着企业的办公方式,其应用范围也越来越广泛,从即时通信、办公文档处理、ERP、CRM到员工工作汇报和考勤等,几乎涵盖了企业办公的方方面面,根据实际工作需要,架构了一个在Android手机客户端上实现与服务器端通过套接字通讯的企业员工信息管理系统,从而实现了一个完成手机需求的信息通道。
套接字;客户端;信使;Service
无纸化是信息化进程的一个理想目标,在无纸化和数字化的进程中,企业既能提高效率,又能实现环保。很多企业正在采取措施改善工作方式。计算机办公很好的实现了无纸化办公。而相比于计算机操作系统下的办公软件,手机版办公软件具有便于携带,硬件成本低,联网便捷等优势。由此,文章提出了架构于手机操作系统之上的信息管理系统的一种设计方案。
套接字通讯是网络通讯方式中一种很常用的架构方式,一般用于手机客户端与服务器上的服务器端程序建立可靠的、双向的、持续的、点对点的通讯连接。服务器端的监听程序用于监听手机客户端的连接请求,一旦监听到客户端发送过来的连接请求,服务器端与客户端就会建立可靠的连接,客户端可以向服务器端发送用户登录信息校验、查询数据库数据表、更新数据库内信息表、删除数据库已知数据等请求。同步手机客户端的系统时间为“网络提供的时间”,同时将计算机设置为自动与“times.windows.com”同步,通过在Eclipse上的Log监听客户端发送的时间点以及观察在服务端接收数据后的断点前面的时间点,通过实际测试比较得到用户登录信息校验的处理时间为285ms,查询数据库数据表的处理时间为291ms,更新数据库内信息表的时间为263ms,删除数据库已知数据的处理时间为271ms。可以发现套接字通讯的处理时间均为毫秒级别,套接字通讯不仅保证了数据准确,而且还做到了数据接收的迅速响应。由此,可以发现套接字通讯在企业办公领域中具有较好的实用性、可靠性,灵活性。同理,客户端也可以接受服务器端反馈回来的校验结果、查询数据表得来的用户需求数据、取得数据库操作结果状态代码等。同时,套接字程序可以通过手机Wi-Fi、3G、4G等通讯方式实现更加自由更加流畅的通讯。
信息管理系统的服务器端是在Visual Studio开发平台下采用C#语言编写的控制台应用程序,启动服务器后,当按下服务器的btnStartServer_Click按钮时,服务器将启动监听程序,监听程序的部分代码如下:
private void ConnectListen(object server) //监听程序
{Socket serverSocket=(Socket)server;//建立服务器端套接字
serverSocket.Listen(20);//启动监听
while (true){
Socket acceptSock=serverSocket.Accept();//建立连接
byte[] byteArray=new byte[112];//定义接收数组
acceptSock.Receive(byteArray);//采用字节数组接收数据
Char[] charCode=Encoding.ASCII. GetChars(byteArray);} //将数组编码
字符型数组charCode[]用于接收客户端发来的各种请求或命令,当接收到的命令是需要进行用户登录的校验时,服务器端会解析数组内的代码并交由dataConn类来处理,dataConn类所定义的GetValue()方法会访问数据库内的用户信息表,得到校验结果将返回给ConnectListen()方法,如果登录成功,则ConnectListen()方法会调用套接字的发送程序SendFile()方法。发送程序SendFile()将数据发往客户端。图1描述了服务器端启动后监听程序与数据处理程序的工作流程。
图1 服务器端功能图
Android操作系统从其在2008年发布发条机器人1.0版本以来,已取得巨大的成功,如今它已成为主流的手机操作系统之一,Android是一种以Linux和JAVA为基础的开放源代码操作系统。本文中客户端是在eclipse开发平台下采用JAVA语言编写,作为套接字程序的客户端Client,用于发送请求到服务器并接收服务器返回的查询结果并调用UI显示界面,实现数据对程序的驱动。但是,在实际开发中如果直接把大量的数据和算法以及UI的更新都实现在主程序中,将会占用大量系统内存及造成程序的卡顿,还会带来线程安全性等问题。由此,我们采用客户端Service来处理客户端通讯数据。在Android系统开发中,Service是一个重要的组成部分。如果某些程序是不希望用户看见的,那么可以将这些程序定义在Service中,这样就可以完成程序的后台运行(也可以在不显示界面的情况下运行),即Service实际上相当于一个没有图形界面的Activity程序,而且当用户要执行某些需要跨进程访问时,也可以使用Service来完成。Service是一个没有UI界面的操作组件,主要的功能是为Activity程序提供一些必要的支持,如手机中的MP3播放软件等,当回到主界面时这些组件依然可以运行,同样,我们就可以把客户端的接收程序及发送程序写在Service类实例的内部。图2为客户端消息传递结构图。
图2 客户端信息传递结构图
首先,需要为客户端建立基于套接字架构的客户端通讯实例Instance(图2的通讯4),其通讯代码如下:
同时,在主界面程序中每次切换主界面都需要与Servie服务进行绑定(图2的绑定2)。绑定后客户端的主程序就可以与Service建立实时的消息传递通道。其代码如下:
绑定后的Service与运行中的Activity程序的通讯通过Messenger信使来实现(图2的消息3),从而实现了基于消息的进程间通信。进程间的通信其实是在客户端发送一个Message到服务端,在服务端的handler中会接收到客户端的信息,然后服务端对信息进行处理,同样,如果在服务端也可以将信息封装成Message,再发回给客户端,客户端的handler会接收到信息。服务器端创建信使Messenger的代码如下:
在信息管理系统中,信使将会处理包括用户登录信息,工作汇报请求,请假信息发布,出差申请等操作为Message消息,通过Messenger发往Service服务,在Service中,消息会通过套接字发往服务器。服务器在数据流内读取数据,将数据解析成命令,不同的命令将会触发不同的功能。这些功能将会访问数据库,读取所需的字段或者表结构,经过处理后通过套接字发往手机客户端。同理,由套接字传递到Service服务的数据库数据或者登录状态将会通过Service内部的Messenger处理成Message,然后发往与之绑定的主Activity程序,主程序端的handler负责解析Message,消息将会被解析为手机操作系统可以读取的数据,数据将会驱动手机客户端的UI界面。图3为登录前后界面变化的情况。
图3 登录前后界面变化
本文提出描述了信息管理系统的登录功能,在登录过程中采用了套接字架构与跨进程通讯信使通道。在管理系统实现其他功能时采用同一个回路即可实现应用功能,只需要断开Service服务与主Activity的绑定,切换UI界面后再重新绑定Activity与Service,就可以继续使用Service实例内的套接字程序完成远程网路通讯。
[1] 李兴华.Android开发实战经典[M].清华大学出版社.
Design of communications architecture bentween client and server base on Android
LIU Yuan1,LI Xiang-yu2,WU Di1,CAO Lu-yuan1,TU Meng1
TP39
B
1009-0134(2016)09-0138-03
2016-07-21
刘源(1987 -),男,辽宁葫芦岛人,助理工程师,本科,研究方向为现场制造执行系统的软件实施。