资源描述
远程遥控智能家电系统的设计
39
2020年4月19日
文档仅供参考,不当之处,请联系改正。
编号: ________
湖北文理学院理工学院
本科毕业论文(设 计)
题 目 远程遥控智能家电系统的设计________
电子科学与信息工程 系 计算机科学与技术 专业
学 号 12317127_________________
学生姓名 樊友蜀__________________
指导教师 李桂华__________________
起讫日期 .10 ~ .6 _________
湖北文理学院理工学院
学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其它个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。
作者签名: 日期: 年 月 日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权湖北文理学院理工学院能够将本学位论文的全部或部分内容编入有关数据库进行检索,能够采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
保密□,在 年解密后适用本授权书。
本学位论文属于
不保密□。
(请在以上相应方框内打“√”)
作者签名: 日期: 年 月 日
导师签名: 日期: 年 月 日
远程遥控智能家电系统的设计
摘要:随着计算机技术的发展,远程信息交互变得简单。智能设备的诞生使得人们的生活更加方便。特别是近几年“物联网”概念的出现,使得智能设备接入网络的技术发展迅速,特别是智能家电领域。当智能家电接入网络之后,我们能够经过手机或者其它手持智能设备在世界任意角落控制家里的家电设备。其给我们带来的方便性,不言而喻。
本文则是基于最新“物联网”技术,描述了实现手持智能终端控制家电设备的开发过程。介绍了系统所使用的技术,实现的方法以及系统的特点。实现经过安卓手机终端远程查看室内电灯的状态和和对其状态的控制,以及实现对室内温度实时查看的功能。
关键词:智能家电; 远程控制;智能终端;物联网
Design of remote control system of intelligent home appliances
Abstract: With the development of computer technology, remote information exchange easier. Born smart devices make people's lives more convenient. Especially in recent years there "things" concept, making smart devices access network technology is developing rapidly, especially in the field of intelligent home appliances. When the access network smart appliances, we can phone or other smart handheld devices in any corner of the world to control home appliances. Which has brought us convenience, self-evident.
This article is based on the latest "Internet of Things" Thinking technology, describes the implementation of smart handheld terminal control appliances in the development process. The technical system used, the characteristics of implemented methods and systems. Check ultimately indoor lamp by Android handset remote control status and switch status, as well as the indoor temperature to achieve real-time viewing.
Key words: Smart Appliances ; remote control ; Intelligent Terminal ;Internet of Things
目 录
1 引言 1
1.1 课题研究背景和意义 1
1.2 课题研究的限制及发展趋势 1
2 开发环境与技术 2
2.1 开发环境 2
2.2 相关技术 2
3 系统分析 4
3.1 系统可行性分析 4
3.2 需求分析 4
3.3 数据流分析 5
4 系统总体设计 7
4.1 系统总体结构设计 6
4.2 各部分功能设计 7
4.3 数据库设计 8
5 系统详细设计与实现 10
5.1 嵌入式部分 10
5.2 桌面客户端部分 11
5.3 服务器端部分 13
5.4 手持端部分 15
6 系统测试 17
6.1 软件测试概述 17
6.2 软件测试环境 17
6.3 系统测试 17
7 总结与展望 19
7.1 总结 19
7.2 展望 19
参考文献 20
致 谢 21
1 引言
1.1 课题研究背景和意义
随着社会信息化的加快,人们的工作、生活和通讯、信息的关系日益紧密。信息化社会在改变人们生活方式与工作习惯的同时,也对传统的生产方式提出了挑战,社会、技术以及经济的进步更使人们的观念随之巨变。人们对传统电器的要求早已不只是功能强大、方便快捷,更为关注的是更加人性化的普及的智能化环境,智能电器始终引领人们生活品位的提高。在科学技术与实际生活关系日益密切的今天,智能家居为越来越多追求时尚与方便的年轻一族们追捧。
经过远程控制智能家电系统,人们能够不受时间和空间的束缚,在任意时间、地点经过手持设备查看家里电器是否还在工作并根据需要对其进行远程控制,从而改变其工作状态。例如当我们出门忘记关灯,那么在出门之后我能够查看家里电灯是否处于开着的状态,并把它远程关掉。也能够实时获取家里必要数据,例如获取温度或者湿度,并经过远程控制家电进行调节。
1.2 课题研究的限制及发展趋势
当家庭智能网关将家庭中各种各样的家电设备经过家庭总线技术连接在一起时,就构成了功能强大、高度智能化的现代智能家居系统。智能家居强调人的主观能动性,重视人与居住环境的协调,能够随心所欲地控制居住环境Error! Reference source not found.。自1999年起,国家信息产业部、科委、建委等部门组织有关专家论证和规划中国如何发展智能小区、智能家庭计划。国家经贸委又组织长虹、海尔、中兴等十一家相关企业成立家居网络、智能化联合体,目的在于开展家庭网络技术以及终端产品的研发。使中国这一领域得以有序和顺序的发展。
就当前趋势看,全世界在未来两年将有1亿家庭进入智能化、网络化,每年带来的市场总值高达4500亿美元其中3700亿元是硬件产品的价值,截止到 ,50%以上的新房将具有一定的智能型家居。据调查,仅北京市场每年就有15亿左右的智能开关市场目标销售额。可见智能家居的市场潜力之巨大Error! Reference source not found.。
随着大屏幕触屏智能手机稳稳地确立移动网络市场的绝对霸主地位,包括平板电脑的受欢迎程度,我们发现,可视化控制和操作逐渐成为市场的主流趋势。因此,智能家居的可视化操作将成为未来很长一段时间内的流行趋势。可视化控制操作其实就是更加方便和简单,受众范围将不再局限于年轻人,老人孩子都能够非常轻松地掌握Error! Reference source not found.。
2 开发环境与技术
2
2.1 开发环境
2.1.1 eclipse
eclipse是著名的集成开发环境,它经过不同的插件实现不同需求的开发,且其界面友好,扩展插件功能丰富,使用简单,得到了绝大多数java开发者的青睐。本系统桌面端、服务器端以及手持客户端程序也是基于java语言的,因此选用eclipse作为这三部分的开发环境。
2.1.2 Keil uVision4 MDK-ARM
Keil uVision4提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,经过一个集成开发环境(uVision)将这些部分组合在一起。且其界面友好,调试功能强大,支持芯片型号众多,因此选其作为本系统嵌入式部分的开发环境。
2.1.3 MySQL
MySQL是一个关系型数据库管理系统,它支持标准的sql语言,功能强大,访问速度快,体积小,存储数据量大。由于它是开源的,总体拥有成本低,更是众多中小企业的选择。因此选择MySQL作为本系统数据库管理系统。
2.1.4 ADT
本系统手持客户端以安卓平台为主,开发工具则选用google官方的开发工具ADT。且其作为插件集成在eclipse中,组成功能的强大的android集成开发环境。因此本系统开发工具选用ADT开发手持端软件部分Error! Reference source not found.。
2.2 相关技术
2.2.1 Java Socket技术
本系统桌面端、服务器端、手持端三部分的通信都经过scoket完成。Socket和ServerSocket类库位于包中。ServerSocket用于服务器端,Socket在建立网络连接时使用。当桌面端和手持端成功连接服务器端时,三部分都会产生一个实例,在获得实例的输入输出流之后,经过向输入输出流写入字符或读取字符完成信息交互。
2.2.2 Java comm技术
当前,常见的Java串口包有SUN在1998年发布的串口通API comm2.0.jar(Windows下)、comm3.0.jar(Linux/Solaris);IBM的串口通信API以及一个开源的实现。鉴于在Windows下SUN的API比较常见以及IBM的实现和SUN的在API层面都是一样的,因此本系统选用SUN的串口通信API在Windows平台下的使用Error! Reference source not found.。
2.2.3 Java多线程技术
Java多线程技术实现了软件多任务并发执行。服务器采用多线程实现多客户端连接。在实现socket信息交互方面,多线程是必不可少的。
2.2.4 基于stm32的嵌入式控制技术
嵌入式技术依靠其体积小、成本低、功能强等特点,适应了智能化发展的最新要求。单片机作为控制系统的微处理器,在数据处理和代码存储等方面都已经无法满足系统的要求,ARM微处理器资源丰富,具有良好的通用性。Cortex-M3是ARM公司最新推出的第一款基于ARMv7体系的处理器内核。基于Cortex-M3内核的STM32系列处理器于 由ST公司率先推出,它集先进Cortex-M3内核结构、出众创新的外设、良好的功耗和低成本于一体,极大的满足自动控制系统设计要求Error! Reference source not found.。
3 系统分析
3
3.1 系统可行性分析
3.1.1技术可行性
系统手持端、服务器端、桌面端使用java语言开发,嵌入式端使用C语言开发。数据库选择MySQL。开发工具使用eclipse和Keil MDK。考虑到现今硬件的发展,在硬件上同样也是可行的。综合技术分析来看,技术可行性本系统是可行的。
3.1.2经济可行性
系统所采用的开发工具及技术均是免费的。整个系统的开发均由本人完成,从而节省了人力成本。硬件成本方面,嵌入式模块为STM32F103C8T6核心板,价格较为便宜。开发者有能力承担,因此经济方面也是可行的。
3.1.3运行可行性
系统在开发完成之后,由开发人员调试连接完成。在服务器端,启动服务器程序即可。桌面程序端完成之后在桌面电脑开启运行即可。对用户来说,使用桌面客户程序跟普通软件一样。因此,使用并没有难度。而手持端则是一款安装在安卓手机上的app。界面简洁,操作简单。因此系统在运行方面也是可行的。
3.2 需求分析
需求分析是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作。需求分析是软件开发的一个关键过程。在这个过程中,需要和用户进行重复沟通以确定用户的需求。只有在确定了这些需求后,才能够分析和寻求新系统的解决方法。需求分析阶段的任务是确定软件系统功能。本系统的使用者主要是普通家电控制用户,其次是服务器管理用户Error! Reference source not found.。
3.2.1功能性需求分析
(1)查看家电工作状态
该系统需要提供查看功能,用户能够经过手持设备端,实时查看各个家电工作状态。以便根据家电的工作状态,作出需要的控制操作。
(2)控制家电的工作状态
系统的核心功能即要能够实现用户对家电的远程控制,用户能够经过手持端操作界面按钮实现对指定家电的控制。而且要求嵌入式控制端能够采集控制反馈信息,并将其传回手持控制端,以方便用户查看。
(3)用户注册功能
新的用户上线需要进行注册,在注册之后才能进行连接,因此要求系统具有注册功能。
(4)方便的服务器端程序管理
服务器端管理人员要确保信息传递稳定可靠,拒绝非法连接。其次需要根据当前硬件资源限制最大连接数,防止因过多连接导致系统崩溃。另外还需要服务器端释放掉已经断开连接的资源。
(5)可扩展性需求
每个用户需要控制的智能电器设备不尽相同,这需要软件具有较好的通用性。其次是当用户添加了新的电器或者淘汰了老旧电器之后,软件并不需要做大量软件更新。这就需要系统具有良好的扩展性和兼容性。
3.2.2非功能性需求分析
(1)安全性需求
每一个家庭同一时间只允许一个手持端进行控制,还要确保家电不会被她人获取连接,或进行非法控制。
(2)界面需求
简洁美观的操作界面必然是受欢迎的软件,优秀的软件界面有简便易用,突出重点,容错高等特点。 而广义上讲,软件界面就是某样事物面向外界而展示其特点及功用的组成部分。 一般我们说的软件界面就是狭义上的软件界面。因为软件是用户的工具,用户需要工具使用方便,界面能直观反应信息Error! Reference source not found.。
3.3 数据流分析
桌面客户端注册,桌面客户端在建立连接之前需要先注册。桌面客户端提交用户信息给服务器,服务器建桌面端提交过来的信息写入数据库。用户注册数据流如图3.1所示。
图3.1 用户注册数据流图
4 系统总体设计
4
4.1 系统总体结构设计
服务器控制模块
桌面转嵌入模块
注册模块
信息收发模块
嵌入式控制部分
嵌入转桌面模块
登陆模块
信息发送模块
数据处理模块
数据交换模块
手持端登陆模块
服务器部分
用户登陆模块
信息接收模块
外设连接模块
接受请求模块
桌面客户端部分
用户注册模块
桌面登陆模块
手持端部分
远程控制系统
系统总体分为四大部分,分别为嵌入式控制部分、桌面客户端部分、服务器部分和手持端部分。每一部分的相关功能采用模块化设计,本阶段确定各模块功能和数据库设计。每个模块分开依据高内聚低耦合的原则Error! Reference source not found.。系统功能结构图如图4.1所示。
图4.1系统功能结构图
4.2 各部分功能设计
4.2.1 嵌入式部分
嵌入式部分需要接收来自桌面客户端的命令,然后经过解析不同的命令进行执行,最后经过IO口执行相关指令。由此分析嵌入式部分主要分为三大模块,分别为信息收发模块,数据处理模块,外设连接模块。信息收发模块负责与桌面客户端进行通信,数据处理模块负责解析来自桌面客户端的命令并发出向IO发送相关指令。还需要将智能电器设备传回的数据进行处理然后发送到信息收发模块。让其把信息传至桌面客户端Error! Reference source not found.。嵌入式功能结构图如图4.2所示。
信息收发模块
嵌入式控制部分
数据处理模块
外设连接模块
图4.2 嵌入式功能结构图
4.2.2 桌面客户端部分
用户注册模块
桌面客户端部分主要负责用户账户注册、用户登陆、接收来自服务器的信息并将其转发到嵌入式端和接收来自嵌入式端的信息并将其转发到服务器。经过以上分析桌面客户端主要分为用户注册模块、用户登陆模块、接收服务器信息转发嵌入式模块(以下称服务器转嵌入式模块)和接收嵌入式信息转发服务器信息模块(以下称嵌入式转服务器模块)Error! Reference source not found.。桌面客户端部分功能结构图如图4.3所示。
用户登陆模块
桌面客户端
服务器转嵌入式模块
嵌入式转服务器模块
图4.3桌面客户端功能结构图
4.2.3服务器端部分
服务器控制模块
服务器部分主要功能为:关闭和开启服务器,接收请求,处理来自桌面注册请求,处理桌面登陆请求,处理手持端登陆请求,交换数据。经过分析服务器应包含以下六大模块,分别是,服务器控制模块、接收请求模块、注册模块、桌面登陆模块、手持端登陆模块、数据交换模块Error! Reference source not found.。服务器端功能模块结构图如图4.4所示。
数据交换模块
接受请求模块
服务器端
手持端登陆模块
桌面登陆模块
注册模块
图4.4服务器端功能结构图
4.2.4手持端部分
手持设备端
信息接收模块
信息发送模块
登陆模块
手持端主要负责与用户的交互,首先需要登陆服务器,因此手持端需要有登陆功能,当用户操作相关控件或者输入相关信息,手持端需要将请求发送至服务器端, 当有来自服务器的信息时,手持端需要接收来自服务器的信息 并将其进行合适处理之后在界面进行反映。由以上分析,手持端需要登陆模块、信息发送模块,信息接收模块Error! Reference source not found.。手持端部分功能模块结构图如图4.5所示。
图4.5手持设备端功能结构图
4.3 数据库设计
4.3.1数据库概念设计
由数据流分析,得到图4.6和图4.7所示E-R图。
密码
智能电器
用户名
用户
设备按钮
电器名
图4.6用户信息
智能电器
图4.7智能电器
4.3.2数据库逻辑设计
经过以上用户实体图知道,数据库需要一张USER_INFO表记录用户的信息,当用户用手持设备连接服务器时,需要提交验证信息,服务器经过比较用户提交的信息与数据库中的信息进行对比,然后反馈给用户,确定是否登录成功。USER_INFO表如表4.1所示。
表4.1 USER_INFO表
字段名
类型
说明
其它
User_name
Varchar(20)
用户名
主键
User_pwd
Varchar(20)
密码
Have_Device
Varchar(500)
拥有的电器设备
经过上面数据库逻辑设计知道,数据库需要Divice_info表记录了各个设备的信息,经过不同设备信息进行不同操作。Divice_info表如表4.2所示。
表4.2 USER_INFO表
字段名
类型
说明
其它
Device_name
Varchar(20)
电器名
主键
Device_button
Varchar(500)
拥有的按钮
5 系统详细设计与实现
详细设计是软件工程中软件开发的一个步骤,是对总体设计的一个细化。本章将在总体设计的基础上对各个模块进行编码实现。
5
5.1 嵌入式部分
5.1.1信息收发模块
信息收发主要利用stm32的USART模块进行通信,本系统采用的STM32F103C8T6的核心板,该芯片共有三个USART,这里我们选用USART1。首先初始化USART,然后配置io口。由于Uart1与PA9和PA10共用,因此将PA10配置为浮空输入,将PA10配置为推挽输出。配置代码较多,故将具体配置代码写成一个函数myusart_config(),以便后面程序再需同样配置,调用函数即可。串口模块调取USART_GetFlagStatus()。函数不断获得寄存器复位标志,当串口模块获得信息,串口相应寄存器标志位复位,从而判断消息是否接受完成。如果信息接收完成,串口模块将信息发送给信息处理模块。经过以上配置,信息收发模块也就完成了。下面是主要的配置代码。
USART_Init(USART1,&USART_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATINGError! Reference source not found.;
5.1.2数据处理模块
首先在数据处理模块设置一个字符型变量result,信息接收模块将接收到的信息存入该变量,数据处理模块循环检测该变量的值,如果值为空则继续检测,如果不为空,则经过判断代码对其进行命令解析,然后将不同的解析命令写到外设模块。同时由将来自外设的数据进行处理后送到收发模块。由于命令较少,为了提高嵌入式处理模块的速度,从而将命令简化为单个字符。当命令为“c”时,处理模块作出关灯指令;当命令为“o”时,处理模块作出开灯指令;当命令为“t”时,处理模块作出采集温度指令。嵌入式模块中采用的温度传感器DS18B20是常见的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点Error! Reference source not found.。它读取并返回的数据随温度不同而不同,当温度为正时,直接将读取的十六进制数值转换为十进制便得到实际温度值。当温度为负值,需要将读取的数值取反后加一便得到需要的温度值。当收发模块读取到采集温度命令并将其写入变量result中,数据处理模块将想外设采集温度的指令。在得到来自外设采集的信息后,数据处理模块对其进行处理,最后以十进制的格式送到发送模块发送出去以下为处理模块关键代码。
While(1){
If(command==’c’){
Close_light();
}else if(command==’o’){
Open_light();
}else if(command==’t’){
Tem=Get_temerature():
}
}
5.1.3外设连接模块
灯光控制主要经过IO口的高低电平来控制,当IO口输出高电平点亮灯光,当IO口输出低电平关闭灯光。首先配置PC13为推挽输出IO,外设连接模块接受来自处理模块的命令,从而执行输出高低电平的命令。温度读入功能则是经过PA6连接温度传感器DS18B20实现温度读入Error! Reference source not found.。返回的外设将读入的值进行处理,然后输出给信息收发模块最后传递给桌面端。本系统采用STM32F103C8T6芯片的最小系统板进行嵌入式处理,由于其具有大量IO口,外设控制能力强,能够同时控制大量家电。关键代码如下。
temperature_convert();//开启温度转换
ms_delay(30000); //等待温度传感器DS18B20转换完成
showdata=get_temperature();//获取温度数据
5.2 桌面客户端部分
5.2.1登录模块
用户在填写完登录信息之后,点击连接登录按钮,客户端将想服务器发送以下格式字符串Login:(这里是填写的用户名):(这里是填写的密码)。发送完后客户端等待来自服务器的反馈。如果收到字符串succss则表明登录成功,界面显示已连接。若收到error,则显示连接失败。在连接成功之后,客户端将开启两个线程用于监听来自服务器或者来自嵌入式端的信息。登录界面如图5.1所示。关键代码如下所示。
desk_send_comm_Thread=newDesk_send_comm_Thread(socket,comm_init);
desk_send_comm_Thread.start();
n1h223ncomm_Thread2=new Comm_Thread(socket, comm_init);
comm_Thread2.start();
图5.1 登陆界面
5.2.2注册模块
注册界面需要具备用户填写用户名,密码的文本框和选择拥有家电的多选框,当用户填写完用户信息,点击注册,客户端经过socket与服务器建立连接,然后向服务器发送如下格式的字符串User_info:name:(这里是填写的用户名):pwd:(这里是填写的密码):(这里是用户选择的电器,可能有多个)。信息发送之后当服务器将用户信息写进数据库之后,将返回一个字符串,客户端接收这个字符串并进行判断,如果返回success 则表明注册成功,客户端返回登录界面,如果注册失败则返回error ,客户端停留在注册界面。
5.2.3服务器转嵌入式模块
此模块用一个线程实现,当客户端与服务器建立连接之后,此线程启动。线程使用死循环不断监听来自服务器的消息,如果有来自服务器的消息,则将消息转发到嵌入式模块。此模块还有一个信息转换作用,前面讲过,为了提高嵌入式模块速度,写入嵌入式模块的命令都是单个字符。因此来自服务器的命令需要进行转换,然后再写入嵌入式模块。关键代码如下。
if(str.equals("open_light")){
out.write('o');
}else if(str.equals("clsoe_light")){
out.write('c');
}else if(str.equals("view_temp")){
if(temper_Thread==null){
temper_Thread=new Temper_Thread(comm_init);
temper_Thread.start();
}}
为了实现温度不断更新,因此上面代码中另外写了一个线程,当来手持端的命令为view_temp时,此线程启动,每隔一段时间发送一次温度读取命令,从而实现温度不断更新的功能。
5.2.4嵌入式转服务器模块
此模块同样用一个线程实现,客户端在与服务器建立连接之后,向此线程返回一个socket,线程取得socket的输出流。同时客户端与嵌入式端建立连接并向本线程返回一个输入流。线程不断读取返回的输入流,一旦读取到信息,则将信息经过输出流发送给服务器。此线程在客户端与服务器建立连接之后启动Error! Reference source not found.。关键代码如下。
str=Integer.toString(a)+"."+Integer.toString(b)+"℃";
daout=new DataOutputStream(socket.getOutputStream());
daout.writeUTF("data:"+str);
5.3 服务器端部分
5.3.1服务器控制模块
此模块主要是开启服务器,启动接收请求的线程。再服务器需要关闭的时候,停止服务,关闭所有的套接字释放资源。启动和停止服务器的操作经过界面上开始与停止按钮实现。界面上设计两个textarea空间,分别用于显示来自桌面客户端和手持设备端的连接。服务器界面如图5.2所示。
图5.2服务器界面
关键代码如下所示。
String str=accept_Thread.getState().toString();
if(!str.equals("RUNNABLE")){accept_Thread.start();}
5.3.2接收请求模块
为了实现服务器能转发多个客户端的功能,在点击启动服务器时,开启一个专门建立连接的线程Accept_Thread(),线程不断的的重复监听来自桌面客户端或者手持设备端的连接,每当监听到来自客户端的连接,此线程便为连接创立一个新线程。新的线程负责处理连接的信息交互。关键代码如下。
socket = server.accept();
System.out.println(socket);
Service_Thread thread=new Service_Thread(socket,desk_table,pwd_table);
thread.start();
5.3.3注册模块
注册模块在接收到来自客户端的注册请求字符串时,先用正则表示式将字符串中的信息进行截取,截取的分隔符为“:”。截取后首先查询数据库是否存在相同的用户名,如果存在,返回字符串“error”,如果不存在,则讲信息写入User_info表和Device_info表并返回 “succss”。
5.3.4桌面登陆模块
当桌面客户端发送登陆请求,服务器线程取得登陆信息,并同查询数据库获得信息与登陆信息比较,如果相同则返回 “succss”并将生产的socket放入一个全局数据结构Hashtable,中key用户名,值为socket。关键代码如下。
desk_table.put(client_name,soc);
pwd_table.put(client_name,pwd);
5.3.5手持端登陆模块
当Accept_Thread()接收到手持端请求时,同样为其建立一个新线程。线程首先查询Hashtable是否存相同账户的客户端套接字,如果不存在,则返回error。如果存在,则查询数据信息并比较是否和请求中的信息相同,如果相同,则返回succss,并建立信息交互线程。否则返回error。关键代码如下。
scend=(Socket)desk_table.get(client_name);
System.out.println("套接字"+scend);
String s=(String)pwd_table.get(client_name);
if((scend==null)||!(s.equals(pwd))){daout=new DataOutputStream(out);daout.writeUTF("error");soc.close();this.stop();}
Service_Thread2 service_Thread2=new Service_Thread2(scend, soc);
service_Thread2.start();
5.3.6数据交换模块
服务器负责信息的双向交互,因此当手持端与桌面端建立连接之后,需要开启两个线程,分别为从手持端到桌面端Service_Thread和桌面端到手持端Service_Thread2的信息交互线程。两个线程均用无限循环实现,其中一个线程线程获取桌面端的输入流用来读取来自桌面的消息,同时获取手持端的输出流,用来将信息发送到手持端。另一个转发线程则相仿。关键代码如下。
Service_Thread2 service_Thread2=new Service_Thread2(scend, soc);
service_Thread2.start()
5.4 手持端部分
5.4.1登陆模块
此模块主要由界面部分组成,界面设计用户信息输入框和用户命令操作按钮。当用户填写完信息,点击登陆按钮,此模块将开启两个模块分别用于向服务器发送消息和接收来来自服务器的消息。发送线程首先将向服务器发送如下格式的字符串client:name:(这里是用户填写的姓名):(这里是用户填写的密码)。此时接收模块不停读取来自服务器的消息,如果收到来自服务器的字符串succes 表明登录成功。此时线程经过handler向主界面发送消息,主界面收到消息更新界面按钮。用户经过操作界面按钮触发发送模块向服务器发送命令。手持端界面如图5.3所示。
图5.3手持端界面
关键代码如下。
my=new MyThread(mHandler1,id.getText().toString(),pwd.getText().toString());
if(!my.getState().toString().equals("RUNNABLE")){
my.start();
5.4.2信息发送模块
信息发送模块经过一个线程实现,线程在连接成功后获得服务器的输出流。线程中设计一个标志字符串flag,当用户操作界面后界面住线程将命令写入flag字符串。线程不断读取字符串的值,如果字符串的值不为空,则将flag的值经过输出流发送出去。关键代码如下。
out.writeUTF("data"+":"+flag);
out.flush();
5.4.3信息接收模块
信息接收模块也经过一个线程实现,当手持客户端与服务器成功建立连接之后,将socket返回给信息接收模块,信息接收模块经过socket获得服务器输入流,并不断读取输入流。当读取到的信息不为空的时候,模块对信息进行判断,如果信息包含显示数据,则线程将数据封装为message发送给handler,handler获得数据将其在主界面进行显示。信息接收模块的主要代码如图5.4所示。
图5.4信息模块关键代码
6 系统测试
6
6.1 软件测试概述
在系统完成之后,为了验证系统存在错误、不正常或者没有按照规定运行,需要对系统进行测试,以保证系统满足开发要求。软件测试在整个系统开发周期中占有重要的地位。软件测试也是软件质量的重要保证以及在整个系统开发中有着不能替代的作用Error! Reference source not found.。
6.2 软件测试环境
软件测试环境如表6.1所示。
表6.1软件测试环境
环境
版本
操作系统
Win7
数据库
展开阅读全文