倪建新
摘要:随着移动互联网技术在日常生活中的不断运用,各类手机APP如雨后春笋般出现,和传统WEB网站直接与数据库服务器交互数据不同的是,手机APP由于受到硬件和安全性方面的限制,大多需要通过其他方法和数据库服务器进行移动数据的交互。该文以Android移动点餐平台为例,首先分析了平台的整体架构,其次介绍了服务器端模块,Socket协议自定义,移动数据交互模块,Android客户端模块等核心内容的实现方法,最后在真实环境中调试并验证了该移动数据交互方法。
关键词:Socket;移动数据交互;Android
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)30-0017-02
Research and Implementation of Mobile Data Interaction Based on Socket Protocol
NI Jian-xin
(Wuxi City College of Vocational Technology, Wuxi 214153, China)
Abstract: With the continuous use of mobile Internet technology in daily life, all kinds of mobile phone APP such as bamboo shoots after a spring rain like appearance, and the traditional WEB different website directly interacts with database server data, mobile phone APP due to the hardware and security restrictions, most need to interact mobile data by other methods and database server. Based on the Android mobile ordering platform as an example, firstly analyzes the overall structure of the platform, then introduces the socket server module, data analysis module, the mobile data exchange module, realization method of the core content of the Android client module, finally in the real environment test and verify the mobile data exchange method.
Key words: Socket; mobile data interaction; Android
随着移动互联网时代的到来,我国的移动应用下载量和新应用的需求迅猛增长,移动APP以其便捷性,多元化的发展已经融入了人们的生活。移动互联网上存在着大量的数据交互行为,传统的WEB网站用户数据交互一般都是浏览器发出数据请求到服务器端程序,服务器端程序再和数据库服务器进行交互得到用户需要的数据,一般都采用直接操纵数据库的方法[1]。移动数据交互如果采用这种方法时会带来一些缺点,如数据包大,数据传输速度慢;实时交互时,服务器性能压力大;数据传输安全性差[2]。基于以上情况,本文提出了通过Socket协议来对移动数据交互进行相应的操作,以移动点餐平台为例,分析了平台的整体架构,介绍了服务器端模块,Socket协议自定义,移动数据交互模块,Android客户端模块等内容的实现方法,对移动数据的交互研究进行了相应的探索。
1 平台整体架构分析
本文中的移动点餐平台采用C/S架构,主要由SQLSERVER2008数据库,Socket服务器模块,Socket移动数据解析模块以及Android客户端模块等相关模块组成。其中SQLSERVER2008数据库用来管理用户数据,Socket服务器用来管理客户端Socket连接及Socket代理线程,Socket移动数据解析模块负责网络数据的传输和解析,Android客户端模块则用来负责用户界面以及用户数据的前端显示。平台总体架构及各模块之间的关系如图1所示:
图1 平台整体架构
2 平台相关模块的设计与实现
2.1 Socket服務器端模块
服务器端由一个Java程序构成,程序运行时启动Socket Server服务,循环监听Socket端口,等待移动客户端的连接,一旦有客户端通过Socket协议连接到服务器上时,保持这个链接并且启动一个单独的服务器端线程来对当前这个客户端的移动数据进行交互处理。
客户端需要查询数据库服务器上的数据时,首先通过输出流发送请求到服务器端,服务器端线程通过输入流接收该请求,然后经过Socket数据解析模块的解析得到具体的查询内容,最后通过服务器端本地的数据库操纵模块查询数据库中的相关表得到用户需要的数据[3]。
由于Socket传输的数据都是以数据流的形式存在,因此在服务器端还设置有数据转换模块,主要有字符流和数组数据的相互转换,用于数据库数据的查询和插入;字符流和图片数据的相互转换,用于图片的上传和下载。
2.2 服务器端数据操纵模块
移动客户端由于硬件性能以及安全性的限制,一般只用于显示用户数据,数据库中数据的操纵一般需要放置在服务器端进行。本系统设置有数据操纵模块DBControl,其采用传统的SQL语句来对本地数据库中的数据进行处理,主要包括数据库的连接,表中数据的查询,插入,修改,删除操作等。
以查询菜品为例,当服务器端线程接收到该请求时就会马上调用DBControl模块中的getFoodList( )方法,首先连接到本地数据库,创建Statement和ResultSet对象,然后使用Select语句查询存放菜品的数据表得到记录集,最后将得到的记录集转换为数组数据。
同样当需要插入新的菜品,更新菜品以及删除菜品时,采用DBControl模块中其它相应操纵本地数据库的方法得到相应的数据,由于操作都是在服务器端进行,大大加快了速度并且提高了安全性。
2.3 Socket协议的自定义和解析
点餐平台中的数据在客户端和服务器端之间以字符流的形式传输,服务器端根据字符流中的字符数据得到想要的操作以及操作的内容,由于操作很多,必须对操作加以区分,程序中在Socket数据流的前端加上自定義的规则以区分相应的操作。
系统中所有的自定义规则都以<#开头和#>结束,后面紧跟着就是操作所需要用的具体数据。系统中设计有自定义的规则<#GET_FOODLIST#>查询菜品,<#GET_FOODDETAIL#>查询菜品详情,<#GET_SHOPCARLIST#>查询菜单,<#INSERT_ADDORDER#>下单,<#IS_USER#>是否服务员,<#GET_PICTURE#>下载图片等
如当移动客户端点击菜品查询时,客户端就发送带有<#GET_FOODLIST#>前缀的数据流到服务器端,服务器端首先通过线程接收该数据流,然后通过startsWith方法匹配相应的自定义规则,最后解析该数据流得到查询菜品的需求。
2.4 移动数据交互模块
当服务器端解析出字符流中的前缀并得到想要的操作时,就需要根据该操作以及操作的内容来和客户端完成数据的交互,主要有查询数据的返回及显示,更新数据的修改及显示,插入数据的新增等操作。
如服务器端解析出<#GET_FOODLIST#>查询菜品需求时,首先根据该前缀后面跟着的FOODTYPEID得到数据库中的菜品列表ID,然后使用Select语句查询该ID下的所有内容,接着转换成数组数据,最后将数组数据转换成字符流发送到客户端,客户端接收该字符流数据并解析出结果,从而完成数据库中数据查询反馈并显示在客户端界面上的数据交互操作。
查询操作相关代码如下:
String temp=msg.substring(18); //截取前缀之后的内容
myfoodtypeid=Integer.parseInt(temp); //转换为整型数据
ls=DBControl.getFoodList(myfoodtypeid); //查询得到数组数据
mess=StrListChange.ListToStr(ls); //将数组数据转换为字符流
dout.writeUTF(mess); //将得到的数据传送移动客户端
当有数据从客户端写入到数据库时则使用相反的操作,首先将需要写入的数据以特殊的字符分隔开,附加到自定义的前缀后面发送到服务器端,然后服务器端解析该前缀并将字符流数据转换成数组数据,最后使用Insert语句对照数据表中的字段名将数组数据依次写入到数据表中,从而完成移动客户端数据写入到数据库中的交互操作。
写入交互操作相关代码如下:
content=msg.substring(17,msg.length()); //截取前缀之后的内容
array=StrListChange.StrToArray(content); //写入的字符流转换为数组
DBControl.insertOrder(array); //调用写入方法写入到数据库
dout.writeUTF("ok"); //返回写入成功到移动客户端
2.5 Android客户端模块
Android客户端模块的功能是将接收到的移动数据显示在用户的手机屏幕上,分为前端布局和后台数据绑定两大部分。在布局上考虑到手机屏幕大小及用户操作的习惯大量采用了ListView组件,ListView中的每一行都可以根据需求单独布局以便匹配数据表中的字段。如显示菜品时,每一行采用LinearLayout布局,一行上放置有ImageView组件和TextView组件。程序使用了SimpleAdapter适配器作为桥梁将ListView和移动数据绑定并显示在用户界面中。
3 平台的调试环境及运行实例展示
本点餐平台服务器端的软件配置环境为Windows2003操作系统,SQLSERVER2008数据库,JDK6.0,移动客户端测试机型为Android虚拟机和Android手机红米2A,1G内存,1280*720分辨率,调试时系统运行流畅,页面显示及页面之间切换快速,用户体验良好。平台运行效果如图2所示:
4 结束语
智能手机的普及为移动APP的开发和使用打下了坚实的基础,未来移动客户端各类APP开发将会迎来广阔的发展空间。本文分析了基于Socket的移动数据交互方法,并以移动点餐平台为例,对Socket服务器端,Socket协议的自定义以及移动数据的交互过程进行了详细的阐述,为服务器端和移动客户端之间的数据交互提供一些开发思路和开发方法。
参考文献:
[1] 霍剑峰. 基于JAVA WEB的虚拟数字图书电子商务平台设计与实现[D]. 长春: 吉林大学, 2015.
[2] 孙鹏飞. 移动综合网络应用客户端和服务器的研究与开发[D]. 北京: 北京邮电大学, 2013.
[3] 李扬, 耿昌宇, 张丽芬. 基于Socket通讯模式下的跨平台数据同步[J]. 北京理工大学学报, 2002(1):81-84.endprint