张 波
(常州纺织服装职业技术学院 教育技术中心,江苏 常州 213164)
基于Socket通信的多媒体教室移动监控模块的设计
张波
(常州纺织服装职业技术学院 教育技术中心,江苏 常州 213164)
文章主要讨论了多媒体教室远程管理系统中的移动监控模块的设计。移动监控模块主要由运动的方式进行通信。APP程序定时从服务器获取网络中控节点的实时状态,同时给用户提供调用接口,通过服务器向下位机(网络中控)发送控制指令完成控制动作。最后,文章总结了移动监控模块的设计意义。
多媒体教室;移动监控模块;Socket;APP;线程
随着多媒体教学的日益普及,各个学校的多媒体教室数量在迅速增长。在现有管理人员不变的情况下,实现高效地管理多媒体教学设备成为学校迫切需要解决的问题。随着手机、平板等手持移动端电子设备的逐渐增多,人们的日常生活方式和行为习惯正悄悄发生着改变,支付宝消费、微信红包等给人们日常生活带来了很大的便利。本论文从技术的角度给出一种多媒体教室移动监控方案。通过该方案,只要有网络,管理人员就可以在任何时间任何地点通过移动端APP程序对远程教室的多媒体教学设备进行监测和控制。
多媒体教室移动监控模块的实现有两个总体思路:直接监控方式和间接监控方式。所谓直接监控方式是教室下位机通过GSM/GPRS模块连接移动网络,以短信的形式将设备状态反馈给移动端手机或者带移动网络的其他设备。移动端也以短信的形式向远程教室下位机GSM/GPRS模块直接发送控制命令。但这样的设计需要在教室下位机增加GSM/ GPRS模块,增加了硬件的复杂度和生产成本,复杂的电路同时降低了通信的稳定性,当教室数量很多并且经常变动时,SIM卡号码的管理也是件让人头痛的事情。本设计采用的是间接监控方式,在原有监控中心服务器(上位机)—教室网络中控(下位机)的远程监控方案的基础上增加了移动监控模块,原有硬件和软件架构完全不需要变动,很方便地实现了系统功能模块的扩展。移动监控模块主要由两部分程序构成:运行于移动设备端的APP程序和运行于监控服务器端的上位机程序以及后台数据库。由于远程教室端设备状态均存储于服务器上的后台数据库并会实时更新,移动端APP只需要定时读取后台数据并实时刷新UI界面就可以向管理人员呈现最新的设备状态;另一方面,移动端APP不需要直接向远程教室下位机发送控制指令,只需要向服务器上位机发送控制指令,再由服务器上位机向对应教室下位机转发相同的控制指令即可。只要选取合适的数据刷新频率,间接监控方式也可以有很好的实时效果。移动监控模块的结构图如图1所示。
移动端APP,Android版采用Java原生语言开发,ios版基于Object C语言开发,两种开发环境这里不做介绍,本文以Android版APP为例来阐述,IOS版与之类似。既然是移动监控程序,那么网络通信是必不可少的,Android Java开发环境中涉及网络通信的组件对象有很多,比如HttpClient,Http URLConnection和Socket等,Http对象通常和某种服务器语言配合使用,比如jsp,php等。在这里我们选择Socket对象,原因是在服务器端我们采用.net c#开发的服务器程序也是基于Socket对象的,移动端APP采用Socket对象和服务器程序通信,两边就能很方便地进行对接。
图1 移动监控模块的结构
所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发送请求或者应答网络请求。Socket有两种主要的操作方式:面向连接(TCP)的和无连接的(UDP),在这里我们选择面向连接(TCP)的操作方式,原因也是为了能和我们的服务器端程序匹配。Java中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。
在移动端APP主程序中,首先实例化一个客户端线程类,该类实例将负责与服务器通信,实例化的同时会新建一个Socket对象,并指定服务器地址和端口,我们可以新建一个InetSocket Address类来描述一个网络目标地址,参数包括IP地址和端口号,InetSocket Address类作为Socket对象的连接参数。其次如果和服务器连接失败则返回网络错误,如果和服务器连接成功则开始如下的工作:每5s钟向服务器提交教室设备状态刷新请求;每15s钟定时向服务器发送保持在线状态的心跳包。为了保证手持移动设备在按下电源键关闭屏幕后仍然能够定时向服务器发送消息包,我们不使用Handler 与timer及TimerTask结合的方法,而是采用Handler与线程的sleep(long)方法或者采用Handler的postDelayed(Runnable, long)方法,假设这里采用前者,启用两个线程暂停(sleep)一段时间以后发包。最后在Socket对象和服务器连接成功之后,我们需要通过Socket对象的getOutputStream()方法来获取输出流OutputStream发送消息包,通过Socket对象的getInputStream()方法来获取输入流InputStream接收消息包。值得注意的是,需要在客户端类实例中单独开启一个线程来接收从服务器发送过来的消息包,而且该线程的读取过程需要往复循环进行以保证不会丢包,我们可以用一个死循环比如while(true),也可以用循环对象Looper来实现。另外在从服务器读取到设备状态数据以后,不是直接更新主线程中的UI界面,而是向主线程发送消息Message,主线程接收到消息Message以后根据消息内容来更新UI界面。在搞清楚上述一系列问题以后,移动端APP主程序的流程便非常清楚了,如图2所示。
对远程多媒体教室设备的控制过程是这样的,当管理者用手指触控APP UI中的按钮发出各种控制指令时,APP主程序首先需要判断是何种控制命令(打开中控电源命令或打开投影机命令),然后根据命令类型封装消息包,最后利用客户端线程类实例句柄(handler)来向该线程类实例发送消息,在该类实例的消息处理函数中由Socket对象的输出流OutputStream完成最终的消息包发送。
图2 移动端APP主程序
服务器端是采用.net c#语言环境开发的winform类型应用程序,主线程启动以后首先创建用于服务端侦听的主Socket,打开相应的侦听端口接收移动端和下位机的Socket接入。然后启动一个处理接入Socket连接的子线程,该线程默认处于阻塞状态,当有远端Socket连入时,该线程会在服务端创建相应的Socket来处理和远端Socket的通信,同时会启动一个新线程来负责和这个远端Socket通信消息包的接收和发送。为了能够维护和管理客户端Socket,我们需要设计一个客户端连接对象,这个结构将客户端Socket、新的连接子线程关联起来,并且将这个客户端连接对象增加到客户端连接对象集合中,这样对于后期的遍历、检索、引用以及对象的增删改操作都将非常方便;管理子线程是主线程启动以后需要启动的另外一个子线程,该线程负责离线客户端对象的清理、自动恢复和删除选中的客户端、读取服务器后台数据库状态并更新服务器树形列表UI、查询服务器后台数据库显示当前教室状态等事务。服务器端程序主流程如图3所示。
服务器程序处理移动端消息包是单独启动一个连接子线程进行的,当收到有效数据包时首先记录时间戳,管理子线程根据这个时间戳判断移动端是否离线。然后判断设备状态数据是否请求消息包,如果是则读取请求消息包的教室号字段,再根据教室号检索后台数据库,最后将检索到的教室设备状态数据封装成消息包返回给移动端;如果不是设备状态数据请求消息包就判断是否保持在线状态消息包,如果是保持在线状态消息包则更新该移动端的激活时间为当前时间;如果既不是设备状态数据请求消息又不是保持在线状态消息则判断是否为设备控制消息包,如果是设备控制消息包则根据获取的教室号将消息包转发至对应教室的下位机(网络中控)以完成设备控制动作。
通过本模块的设计,能够让管理人员在任何时间任何地点,只要有网络信号、有安装了APP的手机或者平板等移动端设备,就能够实现对多媒体教室设备的远程监控和维护管理。发生故障的设备能够在第一时间发现、诊断和维修,提高了设备的运行效率,减少了设备管理人员的工作量。据统计,使用了该管理模块以后,设备维修的平均响应时间缩短75%,教室设备的平均故障率降低53%,设备管理人员的维护工作量减少了68%,师生对于多媒体教室的使用满意度大幅度提升。
图3 服务器端主程序
[1]梁晓明,王惠芳,张新岭,等.基于ARM及GPRS的多媒体教室中控系统设计[J].河北工业科技,2012(6):435-437.
Design of mobile monitoring module of multimedia classroom based on Sockets communication
Zhang Bo
(Education and Technology Center of Changzhou Textile Garment Institute, Changzhou 213164, China)
This paper mainly discussed the design of mobile remote monitoring module management system in multimedia classroom. Mobile monitoring module mainly communicates by way of movement. The APP program obtain real-time status in network control nodes timing from the server, and provides the user with interface at the same time, completing control action through the the server(WEB)sending control command. Finally, the article summarized the design significance of mobile monitoring module.
multimedia classroom; mobile monitoring module; Socket; APP; thread
常州纺织服装职业技术学院2012年校级应用课题;项目名称:多媒体教室远程集中控制系统的设计与实现;项目编号:CFK201207。
张波(1982— ),男,江苏盐城,硕士;研究方向:计算机软件开发方面教学与管理。