APP下载

利用Web Service实现嵌入式设备与PC端的无线通信*

2016-06-01

单片机与嵌入式系统应用 2016年3期
关键词:无线通信

刘 兵

(1.承德石油高等专科学校 社科与数理部,承德 067000;2.河北省仪器仪表工程技术研究中心)



利用Web Service实现嵌入式设备与PC端的无线通信*

刘兵1,2

(1.承德石油高等专科学校 社科与数理部,承德 067000;2.河北省仪器仪表工程技术研究中心)

摘要:介绍了Web Service的运行原理与技术特点,给出了利用C++语言借助于gSoap工具包实现Web Service 技术的方法,最后,利用Web Service开发了一个基于WinCE的嵌入式设备与PC端数据库无线通信的实例。

关键词:Web Service;嵌入式设备;gSoap;WinCE;无线通信

引言

嵌入式设备主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,它是集软硬件于一体的可独立工作的“器件”。由于嵌入式设备在处理速度和存储方面都还存在一定的局限性,而在实际嵌入式程序的开发中,往往所需要的数据量很大,占用资源较多,所以在实际应用系统中,需要利用嵌入式设备与PC服务器端的数据库进行通信,从而获得所需要的数据并将其加以处理和实时显示。基于此,针对以Windows CE[1-2](以下简称WinCE)为操作系统的嵌入式设备,本文给出了一种利用Web Service技术[3-5]实现嵌入式设备与PC服务器端数据库无线通信的方法。

1Web Service 技术简介

1.1Web Service技术原理分析

Web Service是一个基于XML的可编程实体,它具有一些能够通过Web进行调用的API,Web Service客户端按照定义好的规范向Web Service服务器端发出请求,服务器端接收请求后,根据请求内容通过调用Web服务器端的相应API函数来返回给客户端数据。Web Service采用可扩展的标记语言(XML)表示数据的基本格式,保证无论何种数据都可以被自动转换成XSD类型而与平台无关;数据传输采用HTTP POST方式;数据传输格式采用简单对象访问协议(SOAP)调用远程服务,SOAP协议定义了其消息格式以及通过HTTP协议的使用方法;使用Web service描述语言(WSDL)描述Web Service及其函数、参数和返回值。Web Service的工作原理如图1所示。

图1 Web Service技术运行原理简图

1.2Web Service技术的工作流程

在使用Web Service时,包括3个阶段的通信:

第一阶段的通信被称为发现阶段(Discover),其主要作用是确定在服务器上有哪些服务。经过发现阶段可以确定服务器一共提供了哪些服务,在使用这些服务之前还必须知道这些服务支持怎样的界面。

第二阶段的通信就是发送请求阶段,获得Web Service描述语言WSDL。

第三阶段的通信主要是向Web Service服务器发送信息服务请求,并等待服务器的应答。

1.3Web Service技术的特点

(1) 可操作的分布式应用程序

可以实现不同应用程序和在不同系统平台上开发出来的应用程序之间的通信。与RMI、DOCM、CORBA最大的不同就是,Web Service以SOAP作为基本通信协议,从而避免了复杂的协议转换。

(2) 普遍性,使用HTTP和XML进行通信

任何支持HTTP和XML 技术的设备都可以拥有和访问Web Service,不同平台、不同开发语言均可以调用Web Service。

(3) Web Service可以穿越防火墙,实现真正的自由通信

一般要访问的Web服务器以及要访问的Web Service的客户端很可能位于防火墙后面,都默认关闭其他端口而开发HTTP端口,而Web Service正是基于HTTP的,所以可以穿越防火墙。

(4) 通过SOAP协议实现异地调用

SOAP是Web Service的基本通信协议,是在分散或分布式环境中交换信息,基于XML的协议,通过SOAP协议可以实现不同项目、不同地点,甚至异地调用应用程序。

2Web Service技术的实现

在不同的操作系统下,利用不同的编程语言来实现Web Service技术的方式是不同的,本文采用C++编程语言,利用gSoap来实现Web Service。

2.1gSoap简介

gSoap是一个跨平台的开发SOAP和XML应用的工具,它使用编译器技术,为用户隐藏了WSDL、SOAP、特定XML的实现细节,同时自动提供XML有效性验证、内存管理和类型安全序列化,从而提供透明的解决方案。gSoap工具可将原有的数据类型和用户自定义的数据类型映射成等价的XML数据类型,反之亦然。因此,通过一个简单的API就可得到完美的SOAP互操作性,从而使用户从 WSDL/SOAP/XML的细节中解脱出来,集中精力处理应用程序逻辑。gSoap工具支持传统的C/C++代码(以及留有C接口的其他编程语言)、嵌入式系统以及那些与其他SOAP程序共享计算资源和信息的实时SOAP/XML应用程序之间的集成,可以跨平台,适用于不同的语言环境,并且能够穿透防火墙。

2.2利用gSoap实现Web Service技术

gSoap工具包中提供了两个可执行文件wsdl2h和soapcpp2。其中wsdl2h用来解析wsdl文档生成描述服务的C/C++头文件,soapcpp2用来解析与编译该头文件并生成框架代码文件,其中的主要文件如表1所列。

表1  gSoap工具包生成的框架文件

除此之外,gSoap工具包还包含两个重要的文件:stdsoap2.h和stdsoap2.cpp。其中stdsoap2.h是stdsoap2.cpp运行时的头文件,stdsoap2.cpp是运行时的C++库,包括HTTP/SOAP解析器和运行时的支持例程。通过这两个文件和上述的框架代码文件,开发者可以很方便地进行Web Service客户端与服务器端程序的开发。gSoap开发的Web Service服务器端和客户端的交互模型如图2所示[6]。

图2 gSoap开发的Web Service客户端与服务器端交互示意图

2.2.1利用gSoap实现Web Service服务器端开发

在服务器端开发中,首先开发者要手动输入C++头文件,该头文件里要定义好服务器端所需的数据与方法,然后利用gSoap中的可执行程序soapcpp2进行编译,生成服务器端的框架文件(包括头文件soapH.h、soapStub.h和stdsoap2.h以及源代码文件stdsoap2.cpp、soapServer.cpp和soapC.cpp)。除此以外,编译后还会生成一个与刚刚定义好的头文件相对应的命名空间文件和一个用于描述相应服务的WSDL文档文件。在Visual Studio 中将以上所有文件导入工程中,成功通过编译后,Web Service服务器端框架便搭建成功,此时,程序员只需要在该工程的主程序代码中将定义好的头文件中的方法一一实现即可。以上操作流程如图3所示。

图3 Web Service服务器端开发流程图

2.2.2利用gSoap实现Web Service客户端开发

图4   Web Service   客户端开发   流程图

在客户端开发中,首先开发者要利用gSoap中的可执行程序wsdl2h,将服务器端生成的WSDL文件进行编译,从而获得所需要的C++头文件,然后,与服务端程序开发类似,利用gSoap中的可执行程序soapcpp2,对所得到的头文件进行编译,从而生成客户端的框架文件(包括soapH.h、SoapStub.h和stdsoap2.h以及源代码文件stdsoap2.cpp、soapClient.cpp和soapC.cpp),还包括一个对应的命名空间文件。同样,在Visual Studio 中将以上所有文件导入工程中,成功通过编译后,Web Service客户端框架便搭建成功,此时,程序员就可以在该工程的主程序代码中去调用服务器端实现的方法了。以上操作流程如图4所示。

3基于WinCE的嵌入式设备与PC服务器端数据库无线通信的实例

本节介绍利用Web Service技术来实现一个基于WinCE6.0的ARM9嵌入式设备与PC服务器端数据库无线通信的实例。

3.1PC服务器端程序开发

首先,在Windows系统中,利用Sybase公司的SQL Anywhere数据库建立所用数据库,数据库文件名为demo.db,然后,在该数据库中建立一个测试用的数据表名为demoobjuser,并向该表中添加数据,具体数据表如图5所示。

图5 demoobjuser数据表

利用Visual Studio 2008新建一个Win32控制台应用程序,工程建完后,在该工程中新建一个头文件server.h,在该头文件中首先需要定义服务器端的一个结构类型数据ns__userInfo:

Struct ns__userInfo{

char name[36];

int id;

}

此外,还需要定义一个函数ns_getInfo。其中,ns__userInfo用于接收从数据库中读取的数据内容,函数ns_getInfo用于执行对数据库的读取操作。头文件编写完毕后,利用2.2.1小节中的方法,通过使用gSoap工具包对server.h进行编译来构建PC端的服务器程序。构建完成后,在工程中建立一个含有程序入口的主程序源文件server.cpp,在该文件中首先要编写定义好的ns_getInfo函数,以实现对本地数据库demo.db中demoobjuser内容的读取。该函数的代码如下:

int ns_getInfo(struct soap *add_soap,int id,std::vector* info){

::CoInitialize(NULL);

DataObject databaseConnect;

databaseConnect.OpenDatabase();

databaseConnect.m_GetAllUserInfo_Exec(info);

databaseConnect.CloseDatabase();

return SOAP_OK;

}

其中,DataObject为数据库连接类,用于连接所建立的demo.db数据库,m_GetAllUserInfo_Exec为该类下的一个成员函数,可以实现对数据表demoobjuser中数据的读取。

然后,通过编写以下代码,来开启Web Service服务。

int nPort = 8080;

struct soap fun_soap;

soap_init(&fun_soap);

soap_bind(&fun_soap, NULL, nPort, 100);

while (true){

int nSlave = (int)soap_accept(&fun_soap);

if (nSlave < 0){

soap_print_fault(&fun_soap, stderr);

exit(-1);

}

fprintf(stderr, "Socket connection successful : slave socket = %d ", nSlave);

soap_serve(&fun_soap);

soap_end(&fun_soap);

::CoUninitialize();

}

以上代码中“fun_soap”为gSoap的一个运行环境实例,“nPort”为Web Service服务器端绑定的接口,其他一些函数为gSoap所提供的API函数。至此,PC服务器端的程序编写完毕。

3.2基于WinCE的嵌入式设备客户端程序开发

首先利用Visual Studio 2008新建一个Win32智能工程,此时要注意选择与本实例中的嵌入式设备硬件平台相对应的SDK。然后按第2.2.2节中的方法通过编译服务器端生成的WSDl以及利用gSoap编译器来生成客户端的框架文件。文件生成后,将其导入到工程中,在程序中需要读取PC服务器端数据库内容的源文件代码中引入的soapH.h、soapStub.h头文件以及生成的空间文件,并加入以下程序代码,来与PC服务器端进行数据通信。

char* server = "http://192.168.1.4:8080";

struct soap add_soap;

soap_init(&add_soap);

std::vector info;

int id = 0;

soap_call_ns_getInfo(&add_soap, server, "", id,&info);

soap_end(add_soap);

free(add_soap);

以上代码中变量“server”给出的是无线局域网内PC服务器端的IP地址与通信端口。需要注意的是,通信的端口要与所开发的服务器端绑定的端口一致,否则无法实现通信。而soap_call_ns_getInfo则实现了通过客户端调用PC服务器端ns_getInfo函数的功能,通过该函数实现了对PC服务器端数据库demo.db中demoobjuser内容的读取,并将读取出的内容存储于变量info中。此时,在该程序中就可以实时地将PC服务器端数据库中的数据显示在嵌入式设备的界面中(如图6),从而实现嵌入式设备与PC服务器端数据库进行无线通信的功能。

图6   基于WinCE 的嵌入式设备与   PC服务器端数据库无线通信   的显示界面

结语

Web Service是服务器端向客户端提供的一种跨越互联网的服务,是建立在一些通用协议(如HTTP、SOAP、XML等)基础之上的。由于这些协议在涉及到网络、操作系统平台、对象模型和编程语言的选择时没有任何倾向和特殊限制,因此,通过该技术,使用不同语言开发、运行在不同平台上的客户可以无缝地获取所需的应用。在嵌入式设备中,由于特定的应用和资源相对贫乏,因此,通过利用Web Service可以方便地实现与PC端的数据通信,从而达到资源效率的最大化。

参考文献

[1] 何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2005.

[2] 周毓林.Windows CE.net 内核定制及应用开发[M].北京:电子工业出版社,2005.

[3] 柴晓路.WebService技术系列概述[J].互联网世界,2002(5):80-83.

[4] 王绘,尹治本.WebService的深入剖析与研究[J].电脑知识与技术,2005(33).

[5] 饶元,冯博琴.新网络体系结构—WebServices研究综述[J].计算机科学,2004(5).

[6] 李永.基于Embedded Linux的gSOAP的移植和裁剪[J].微型电脑应用,2011,27(1):40-43.

刘兵(硕士研究生),研究方向为计算机算法与嵌入式软件开发。

[3] 邓乃扬,田英杰.支持向量机—理论、算法与拓展[M].北京:科学出版社,2009.

[4] Burges CJC.A tutorial on support vector machines for pattern recognition[J].Data Mining and Knowledge Discovery,1998,2(2):121-167.

[5] Chang CC,Lin CJ.LIBSVM:a library for support vector machines[EB/OL].[2015-08].http://www.csie.ntu.edu.tw/~cjlin/libsvm.

[6] Genow R,Cauwenberghs G.Kerneltron:support vector machine in silicon[J].Neutral Networks,2003,14(5):1426-1433.

[7] 刘陵顺,高艳丽.TMS320F28335 DSP原理及开发编程[M].北京:北京航空航天大学出版社,2013.

[8] 杨玮龙,李攀,厉剑.支持向量机在DSP中的实现方法研究[J].计算机测量与控制,2007,15(1):76-78.

Wireless Communication Between Embedded Device and PC Using Web Service

Liu Bing1,2

(1.Department of Social Science and Mathematics,Chengde Petroleum College,Chengde 067000,China;2.Hebei Instruments and Meters Engineering Technology Research Center)

Abstract:The operating principle and technical characteristics of Web Service are introduced in the paper,and the method of using C++ language to achieve the Web Service technology with gSoap is given.At last,an example about wireless communication between the embedded device based on WinCE and the database in PC using Web Service is developed.

Key words:Web Service;embedded device;gSoap;WinCE;wireless communication

收稿日期:(责任编辑:薛士然2015-09-17) (责任编辑:薛士然2015-08-31)

中图分类号:TP311

文献标识码:A

* 基金项目:承德市科学技术研究与发展计划项目(201422115)。

猜你喜欢

无线通信
宽带脉冲无线电通信关键技术及应用研究
基于单片机无线数显温湿度计的设计
基于FPGA的语音无线传输系统
无线通信技术未来发展趋势分析
超宽带无线通信技术及其应用综述
餐饮业油烟在线监控系统的设计与研究
基于ZigBee的舱内人员巡检系统的应用研究
基于ARM的大棚种植环境检测系统设计