GSoap工具的安装和使用
gsoap使用方法及心得----CC++Linux

gsoap使用方法及心得----CC++Linux一、环境准备在本文中,所有程序均在Linux下开发完成,经测试能够正常运行。
在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得:我下载的是gsoap_2.7.12.tar.gz下载下来解压缩,按正常安装过程进行编译、安装。
# tar zxvf gsozp_2.7.12.tar.gz# cd gsoap_2.7.12# ./configure –-prefix=/usr/local/gSOAP(指定安装路径)# make# make install二、生成相关文件1、通过WSDL文档,生成C/C++头文件# /usr/local/gSOAP/bin/wsdl2h –c -o TestHeader.h2、拷贝gSOAP源代码中import文件夹下的stlvector.h文件到TestHeader.h同一目录,如果在解析WSDL文档时使用了-s参数,即不使用STL,则不需要拷贝这一文件。
2、解析TestHeader.h文件,生成存根程序# /usr/local/gSOAP/bin/soapcpp2 –c -C TestHeader.h命令中参数-c代表生成标准C程序,若没有这个参数,则生成C++程序。
命令中参数-C代表仅生成客户端程序,若没有这个参数,则默认生成客户端和服务端程序。
三、进行相关开发1、新建工程新建一个C的工程,并将刚刚生成的文件拷贝到工程中,设置工程属性,包含gSOAP源代码目录,链接属性处,需要包含文件libgsoap.a(使用C语言开发)或者libgsoap++.a(使用C++开发)。
2、代码开发WebService的具体调用方式可以参见生成的soapStub.h文件。
Demo代码(调用WebService的addUser):#include “soapH.h”#include “TestHeaderHttpBinding.nsmap”int main(){struct soap clientSOAP;struct _ns1__addUser addUserMsg;struct _ns1__addUserResponse addUserResponse;soap_init(&clientSOAP);addUserMsg.in0 = “test”;addUserMsg.in1 = “test”;addUserMsg.in2 = “test”;if(soap_call___ns1__addUser(&clientSOAP, NULL, NULL, &addUserMsg, &addUserResponse) == SOAP_OK){printf(“%sn”, *addUser Response.out);}else{printf(“Errorn”);}soap_destroy(&clientSOAP);soap_end(&clientSOAP);soap_done(&clientSOAP);return 0;}正常的话,编译运行后能够在控制台看到WebService返回的处理结果。
linux gsoap 用法

linux gsoap 用法gSOAP 是一个用于开发Web 服务和SOAP 客户端/服务器应用程序的开源工具包。
它可以让开发者通过创建C/C++ 代码来构建基于SOAP 的Web服务和客户端。
在Linux 上使用gSOAP,你需要遵循以下步骤:1. 下载gSOAP 工具包:- 前往gSOAP 官方网站("gSOAP Toolkit" 下载最新版本的gSOAP 工具包。
- 解压下载的压缩包。
2. 编写服务定义文件(.wsdl 文件):- 使用你喜欢的文本编辑器,编写一个包含要实现的Web 服务的定义的 .wsdl 文件。
这个文件描述了服务的数据类型、操作和消息。
3. 生成源代码:- 打开终端,进入gSOAP 工具包的解压目录。
- 运行命令`./soapcpp2 -C -I path_to_gsoap_toolkit your_service.wsdl`,其中`path_to_gsoap_toolkit` 是gSOAP 工具包的路径,`your_service.wsdl` 是你编写的 .wsdl 文件的路径。
- 这将使用gSOAP 工具根据你的 .wsdl 文件生成C/C++ 源代码。
4. 实现Web 服务:- 在生成的源代码中,找到`your_serviceService.cpp` 文件。
- 在这个文件中,你可以实现Web 服务的操作。
你需要编辑操作的函数实现,处理接收到的请求,并返回响应。
5. 编译生成的源代码:- 在终端中,使用适当的编译器(如gcc)编译生成的源代码。
- 运行命令`gcc -o your_service your_serviceService.cpp soapC.cpp soapServer.cpp stdsoap2.cpp -lgsoap++`,其中`your_service` 是生成的可执行文件名。
- 如果编译成功,将生成一个可执行文件。
6. 启动Web 服务:- 运行命令`./your_service` 来启动Web 服务。
gsoap编译

gsoap编译GSOAP是一款开源的C/C++软件,是一种基于SOAP的Web服务开发工具。
它可以让用户通过简单的代码,实现创建SOAP消息、IPC、Web服务和Web应用程序等功能。
用户可以使用gSOAP开发部署服务器端和客户端的应用程序。
本文将向您介绍gSOAP编译,并告诉您如何使用该工具。
第一步:下载gSOAP软件包在编译gSOAP之前,我们需要从官方网站下载gSOAP软件包。
该网站提供了多种版本的gSOAP,您可以根据自己的需要选择不同的版本。
建议您下载最新版本的gSOAP。
第二步:解压缩gSOAP软件包下载完成后,将gSOAP 软件包解压缩到您的计算机上。
如果您使用的是Linux和Unix操作系统,可以利用tar命令实现解压缩操作。
例如:$ tar xzf soapsource.tgz第三步:配置gSOAP 进入gSOAP软件包目录。
在该目录中会看到一个名为configure的文件。
Connectors目录中有可选的连接器。
可以使用的连接器有:Stdio连接器SSL连接器HTTPS连接器zlib连接器接下来,我们通过执行configure脚本来生成Makefile,执行以下命令: $ ./configure如果您需要配置gSOAP的全部选项,可以使用以下命令: $ ./configure --help第四步:编译gSOAP 在配置完gSOAP后,我们可以进入soapcpp2目录并使用make命令进行编译。
以下是命令:$ cd gsoap-<version>/gsoap$ make这会生成一个名为soapcpp2的可执行文件。
我们可以使用该文件来生成SOAP客户端和服务器端的代码。
第五步:测试gSOAP 完成编译后,您可以使用gSOAP 测试Web服务和Web应用程序。
您可以使用以下命令测试gSOAP:$ ./soapcpp2该命令将告诉gSOAP要生成客户端和服务器端代码的相关选项。
用gSOAP调用Web Services

用gSOAP调用Web Services1、配置gSOAP从/project/showfiles.php?group_id=52781 下载gSOAP,解压后在gsoap\bin\win32里找到wsdl2h.exe 和soapcpp2.exe程序。
通过这两个程序可以生成客户端需要的C/C++文件。
这两个程序的使用方法:wsdl2h.exe: 编译wsdl文件生成c/c++头文件-o 文件名,指定输出头文件-n 名空间前缀代替默认的ns-c 产生纯C代码,否则是C++代码-s 不要使用STL代码-t 文件名,指定type map文件,默认为typemap.dat-e 禁止为enum成员加上名空间前缀soapcpp2.exe: gSOAP编译器,编译头文件生成服务器和客户端都需要的c/c++文件(如果使用STL,需要从压缩包里找到stlvector.h放到soapcpp2.exe目录下,否则运行失败)-C 仅生成客户端代码-S 仅生成服务器端代码-L 不要产生soapClientLib.c和soapServerLib.c文件-c 产生纯C代码,否则是C++代码(与头文件有关)-I 指定import路径(见上文)-x 不要产生XML示例文件-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)我写了个批处理:wsdl2h -o xxxService.h "WSDL文件URL"soapcpp2 -C xxxService.h如果是asmx,可以在URL后加"?WSDL" 来获取WSDL文件,它是一个XML,用来描述接口,它是与语言无关的,类似COM的IDL文件。
2、创建VC工程,把生成的文件拷到工程目录生成的文件有:soapStub.h 从输入Header 文件生成的经过修改且带标注的Header 文件soapH.h 主Header 文件,所有客户机和服务源代码都要将其包括在内soapC.c 指定数据结构的序列化器和反序列化器soapClient.c 远程操作的客户机存根例程stdsoap2.h stdsoap2.cpp 运行时库的Header 文件stdsoap2.cpp 运行时C++ 库,带XML 解析器和运行时支持例程创建一个控制台工程:把上面的几个文件加到工程;为soapC.c、soapClient.c 和stdsoap2.cpp 选择Not using precompiled headers,因为它们并不依赖于stdafx.h。
C++中gSOAP的使用详解

C++中gSOAP的使⽤详解⽬录SOAP简介gSOAP准备⼯作头⽂件构建客户端应⽤程序⽣成soap源码建⽴客户端项⽬构建服务端应⽤程序⽣成SOAP源码建⽴服务端项⽬打印报⽂SOAP测试项⽬源码总结本⽂主要介绍C++中gSOAP的使⽤⽅法,附带介绍SOAP协议的基础知识,适⽤于第⼀次使⽤gSOAP的开发⼈员。
gSOAP官⽹上的⽰例代码存在⼀些错误,对初次接触的⼈不太友好,本⽂是在官⽅⽰例的基础上进⾏了⼀些补充、改动。
SOAP简介SOAP 是⼀种简单的基于 XML 的协议,它使应⽤程序通过 HTTP 来交换信息,具体内容可以参考教程。
SOAP的本质是通过HTTP协议以XML格式进⾏数据交互,只不过这个XML格式的定义是⼤家公认的。
使⽤SOAP时需注意,SOAP的XML命名空间由于版本的不同可能存在差异(如soapevn、SOAP-ENV),在调⽤SOAP服务前最好确认服务器的XML格式。
gSOAPgSOAP 有商业版、开源版两个版本,开源版使⽤GPLv2开源协议,⽀持多个操作系统,具体内容参考或者。
gSOAP提供了⼀组编译⼯具(可以认为是代码⽣成器)和⼀些库⽂件,简化C/C++语⾔开发web服务或客户端程序的⼯作,开发⼈员可以专注于实现应⽤程序的逻辑:编译⼯具提供了⼀个SOAP/XML 关于C/C++ 语⾔的实现,能够⾃动完成本地C或C++数据类型和XML数据结构之间的转换。
库⽂件提供了SOAP报⽂⽣成、HTTP协议通讯的实现,及相关的配套设施,⽤于最终的SOAP报⽂的⽣成、传输。
本⽂使⽤的库⽂件主要是以下⼏个:stdsoap2.h、stdsoap2.cpp:HTTP协议的实现、最终的SOAP报⽂⽣成,如果是C语⾔则使⽤stdsoap2.h、stdsoap2.ctypemap.dat: wsdl2h⼯具根据wsdl⽂件⽣成头⽂件时需要此⽂件,可以更改项⽬的xml命名空间(后⾯再细说)threads.h:实现⾼性能的多线程服务器需要的⽂件,可以并发处理请求,并且在服务操作变得耗时时不会阻塞其他客户端请求准备⼯作先进⼊官⽹的,然后选择开源版本:将下载的压缩包解压(本⽂使⽤的是gsoap_2.8.117.zip),解压后的⽂件放到⾃⼰习惯的位置(推荐放到C盘)。
gsoap中文文档

gsoap中文文档8.1.2 关于命名空间函数ns1__getQuote(上节提到的)中,使用了ns1__作为远程方法的命名空间。
使用命名空间是为了防止远程方法名冲突,比方多个服务中使用同一个远程方法名的情况。
命名空间前缀及命名空间名称同时也被用来验证SOAP信息的内容有效性。
存根例程通过命名空间表中的信息来验证服务返回信息。
命名空间表在运行时被取出用于解析命名空间绑定,反序列化数据结构,解码并验证服务返回信息。
命名空间表不应该包含在gSOAP预编译器所需输入的头文件中。
在18.2节中将会对命名空间表做详细介绍。
Delayed Stock Quote服务客户端的命名空间表如下:struct Namespace namespaces[] ={ // {"命名前缀", "空间名称"}{"SOAP-ENV", "/soap/envelope/"}, // 必须是第一行{"SOAP-ENC", "/soap/encoding/"}, // 必须是第二行{"xsi", "/2001/XMLSchema-instance"}, // 必须是第三行{"xsd", "/2001/XMLSchema"}, // 2001 XML 大纲{"ns1", "urn:xmethods-delayed-quotes"}, // 通过服务描述获取{NULL, NULL} // 结束};第一行命名空间是SOAP1.1协议默认命名空间。
事实上,命名空间表就是用来让程序员可以规定SOAP编码方式,能够用包含命名空间的命名空间前缀来满足指定SOAP服务的命名空间需求的。
举例来说,使用前面命名空间表中定义的命名空间前缀ns1,存根例程就可以对getQuote方法的请求进行编码。
gsoap入门实例

gsoap⼊门实例1. 环境VS2008,gsoap_2.8,win72. 实例场景:在客户端输⼊⼀个字符串,然后传递给服务端计算字符串长度并返回给客户端(附加⼀些加减乘除法的实现);3. 将..\gsoap-2.8\gsoap\bin\win32中的两个exe⽂件所在路径加⼊环境变量中,后⾯有⽤;4. 新建⼀个⽂件夹,设计⼀个calculator.h⽂件,如下(前⾯⼏⾏的注释我也不知道有啥⽤)1//gsoap ns service name: add2//gsoap ns service namespace: http://localhost/add.wsdl3//gsoap ns service location: http://localhost4//gsoap ns service executable: add.cgi5//gsoap ns service encoding: encoded6//gsoap ns schema namespace: urn:add7int ns__add(int num1, int num2, int* result );8int ns__sub(int num1, int num2, int* result );9int ns__mult( int num1, int num2, int *result);10int ns__divid( int num1, int num2, int *result);11int ns__Hello(char* str,int *len);5. 在该⽂件夹中打开cmd(⽅法ctrl+右键 --》在此处打开命令窗⼝),输⼊命令:soapcpp2.exe calculator.h有关gsoap的命令⽤法⾃⾏百度;6. 你会发现⽣成很多很多⽂件7. 利⽤VS2008创建⼀个calServer的⼯程,将calculator.h add.nsmap soapC.cpp soapServer.cpp soapH.h soapStub.h放⼊该⼯程,并且将gsoap-2.8\gsoap下的stdsoap2.h stdsoap2.cpp也添加到该⼯程;添加完后,在项⽬属性中的链接器--输⼊--附加依赖项中输⼊wsock32.lib;8. 在calServer中添加⼀个main.cpp,代码如下:1 #include "soapH.h"2 #include "add.nsmap"3 #include "stdio.h"4 #include <iostream>5using namespace std;67int main( int argc, char *argv[])8 {9struct soap *CalculateSoap = soap_new(); //创建⼀个soap10int iSocket_master = soap_bind(CalculateSoap, NULL, 10000, 100); //绑定到相应的IP地址和端⼝()NULL指本机,11//10000为端⼝号,最后⼀个参数不重要。
qt gsoap用法

qt gsoap用法Qt gSOAP是一个在Qt框架下使用gSOAP工具包的库。
gSOAP可以通过使用Web服务定义语言(WSDL)生成SOAP服务端和客户端的代码。
在本篇文章中,我将介绍如何在Qt中使用gSOAP库。
首先,要在Qt项目中使用gSOAP,需要先安装gSOAP工具包。
可以在gSOAP官方网站上下载并安装最新版本的gSOAP。
安装完成后,打开Qt项目,将gSOAP的头文件和库文件添加到项目中。
可以通过以下步骤来实现:1. 在Qt Creator中打开项目,选择“项目”菜单,然后选择“属性”选项。
2. 在属性对话框中,选择“构建和运行”选项,然后选择“构建设置”选项卡。
3. 在"C++"部分中,选择“包含路径”选项,点击“添加”按钮,将gSOAP头文件所在的目录添加进来。
4. 在"链接器"部分中,选择“库路径”选项,点击“添加”按钮,将gSOAP库文件所在的目录添加进来。
5. 在"链接器"部分中,选择“附加库”选项,点击“添加”按钮,将gSOAP库文件添加进来。
完成上述步骤后,就可以在Qt项目中使用gSOAP了。
首先,我们需要编写一个WSDL文件来定义我们的SOAP服务。
可以使用gSOAP自带的wsdl2h工具来生成C++头文件。
在终端中运行以下命令:```shellwsdl2h -o HelloWorld.h HelloWorld.wsdl```这将生成一个名为HelloWorld.h的C++头文件,其中包含了定义我们的SOAP 服务所需的类和对象。
接下来,我们可以使用soapcpp2工具来生成主要的gSOAP源文件。
在终端中运行以下命令:```shellsoapcpp2 -i -C HelloWorld.h```这将生成一系列的C++源文件,其中包括用于编写我们的服务代码的skeleton 文件和stub文件。
现在,我们可以在Qt项目中创建一个新的类来实现我们的SOAP服务。
CentOS6.5下编绎gSoap相关问题及解决

CentOS6.5 下编绎gSoap 相关问题及解决,开发环境准备:1,centos 为虚拟下安装,版本为32 位,(64 位同样可以,均测过,需注意的是红色部分内容)2,gSoap:gsoap_2.7tar.gz/~engelen/s oap.html载下来解压缩,按正常安装过程进行编译、安装。
# tar zxvf gsozp_2.7.12.tar.gz # cd gsoap_2.7.12 #./configure 或{./configure -p refix=/usr/local/gSOA P (指定安装路径) }# make # makeinstall问题: ../../ylwrap: line 111: yacc: command not found原因:没有安装:yacc(Yet Another Compiler Compiler)是Unix/Linux 上一个用来生成编译器的编译器 (编译器代码生成器)。
解决方案:sudo apt-get install flexbison(ubantu)yum install byacc(centos) 问题:gsoap-2.7/missing: line 46: flex: command not found决方法: yum install flex( 要重新运行./configure)(centos)apt-get install flex(ubantu) 问题:/usr/bin/ld: cannot find -ly 解决方法:yum install bison-devel(centos)apt-get install bison(ubantu) 问题:../../gsoap/stdsoap2.h:690:19: error: zlib.h: Nosuch file or directory 解决方法:缺少zlib,ubantu 下,apt-get installzlib-develcentos 下, yum installzlib-devel;问题:error: openssl/bio.h: No such file or directory解决方法:yum install openssl-devel(centos)ubantu 下:sudo apt-get install openssl 为了安装OpenSSL通常的库文件,首先使用以下命令来确定在Ubuntu 系统中可获得的库文件的应用版本:sudo apt-cache search libssl |grep SSL sudo apt-get installlibssl-dev至此基本可以了,面执行, make;makeinstall;+| You nowhave successfully built and installed gsoap. | ||| You can link your programs with -lgsoap++ for|| C++ projects created with soapcpp2 and you can link|| with -lgsoap for C projects generated with soapcpp2 -c |||| There are also corresponding libraries for SSL and|| zlib compression support (-lgsoapssl andlgsoapssl++)|| which require linking -lssl -lcrypto -lz | ||| Thanks for using gsoap.|| | | /projects/ gsoap2|+ + 出现此即安装成功;, 开发linux 下Web Service C/C++ 客户端这里,我们直接采用gSoap 工具包自带的wsdl2h 和soapcpp2 工具。
gsoap用户手册

gsoap用户手册gSOAP是一个用于开发Web服务和XML数据处理的开源工具包。
它支持多种编程语言,包括C和C++,并提供了丰富的功能和工具来简化Web服务的开发和集成。
gSOAP用户手册是一个详细的文档,涵盖了gSOAP工具包的安装、配置、使用和高级特性等方面的内容。
用户手册通常包括以下内容:1. 安装指南,用户手册会提供安装gSOAP工具包的详细步骤,包括下载源代码、编译安装和配置环境等内容。
这部分内容通常会针对不同的操作系统和开发环境进行说明。
2. 快速入门,用户手册会介绍如何快速上手使用gSOAP工具包,包括创建一个简单的Web服务、生成客户端代码、编译和部署等内容。
这部分内容通常会包括示例代码和详细的步骤说明。
3. gSOAP基础,用户手册会介绍gSOAP工具包的基本概念和核心功能,包括如何定义和发布Web服务、如何处理XML数据、如何进行SOAP通信等内容。
这部分内容通常会涵盖gSOAP工具包的核心API和使用方法。
4. 高级特性,用户手册会介绍gSOAP工具包的高级特性和扩展功能,包括如何处理安全性、如何进行性能优化、如何集成其他协议等内容。
这部分内容通常会提供一些实际的应用场景和最佳实践。
5. 参考资料,用户手册通常会包括一些附录和参考资料,如API参考、配置文件说明、常见问题解答等内容,以方便开发者查阅和深入理解gSOAP工具包。
总的来说,gSOAP用户手册是开发者学习和使用gSOAP工具包的重要参考资料,它提供了全面而详细的内容,帮助开发者快速上手并深入理解gSOAP工具包的各项功能和特性。
希望这些信息能够对你有所帮助。
稻歌Google Map截获器帮助文档及CHARLS-GIS安装步骤

稻歌Google Map截获器帮助文档及CHARLS-GIS安装步骤谭祥力杨秋香2011年4月22日目录一、歌Google Map截获器v1.1中文版帮助文档 (1)1.1、软件功能 (1)1.2、软件安装 (1)1.3、使用方法 (1)1.3.1 输入要下载地图的范围 (1)1.3.2 输入影像级别 (1)1.3.3 选择拼图存放位置 (2)1.3.4 生成结果 (2)1.4、系统日志 (2)1.5、软件设置 (2)1.5.1 分幅大小 (2)1.5.2 Google 原始格网子图设置 (3)1.5.3 设置地图飘移一次的耗时 (3)1.5.4 设置IE 缓存目录 (3)1.6、注意事项 (3)二、CHARLS-GIS安装步骤 (4)一、歌Google Map截获器v1.1中文版帮助文档1.1、软件功能1、大幅面截获Google Map 上的地图、卫星影像、地形图,拼接并存储为tif 格式的图像,同时附上精确的投影与坐标;2、无幅面大小限制、海量下载、无缝拼接;1.2、软件安装1、直接安装,需要.net2.0 支持,安装后程序会自动提示用户进行安装;2、支持windows XP/Vista/Win7 系统;1.3、使用方法1.3.1输入要下载地图的范围(1)手动输入,在“角点一”与“角点二”中输入经纬度,格式为纬度,经度;(2)地图拾取,点击"Map 点取"按钮,然后用鼠标在地图框中单击,即可获取坐标点;(3)选择要下载地图的类型,在地图框中右上角地图类型导航栏中,选择“地图”,“卫星”或“地形”;(注:选择“混合地图”等同于“卫星”)1.3.2输入影像级别(1)手动输入,输入0 至20 的数字;(注:数字越大,放大得倍数越高。
但不是越大越好,得根据实际情况来定) (2)或者点击“Map 当前级别”,即可获取当前地图显示级别的影像;(3)点击“确定”;1.3.3选择拼图存放位置选择拼图存放的文件夹,文件夹为空最好,否则当生成同名文件时,会覆盖原来的文件。
linux下gsoap使用及移植

Linux下gsoap的使用及移植1、下载gsoap在gsoap的官网中可以找到最新的gsoap安装包及相关文档gsoap官网:/~engelen/soap.html下载地址:/projects/gsoap2/files/2、安装gsoapa、解压zip压缩包命令:unzip gsoap_2.8.1.zipb、进入解压后生成的文件夹gsoap-2.8命令:cd gsoap-2.8/c、切换到root用户命令:su输入密码d、配置编译环境在gsoap-2.8/文件夹下执行configure文件,自动配置编译环境命令:./configuree、编译连接命令:makef、安装gsoap命令:make install安装完毕可用wsdl2h或soapcpp2查看gsoap是否已经安装成功看到上述两个命令的返回说明安装成功3、应用实例wsdl2h -o outfile.h infile.wsdl 实现wsdl文件到h文件的数据映射soapcpp2 -c outfile.h生成相应的底层通信stub,strech程序首先新建一个文件夹名为gsoap;然后(1)不使用wsdl2ha、不使用wsdl2h我们可以直接从.h文件来生成代码。
我们先定义一个函数声明文件,用来定义接口函数,名称为add.h,内容如下://gsoapopt cw//gsoap ns2 schema namespace: urn:add//gsoap ns2 schema form: unqualified//gsoap ns2 service name: add//gsoap ns2 service type: addPortType//gsoap ns2 service port:/~engelen/addserver.cgi//gsoap ns2 service namespace: urn:add//gsoap ns2 service transport: /soap/http//gsoap ns2 service method-style: add rpc//gsoap ns2 service method-encoding:add /soap/encoding///gsoap ns2 service method-action: add ""int ns2__add( int num1, int num2, int* sum );b、执行soapcpp2 –c add.h,自动生成一些远程调用需要的文件c、接下来写一个服务端,创建文件addserver.c#include "add.nsmap"int main(int argc, char **argv){int m, s;struct soap add_soap;soap_init(&add_soap);soap_set_namespaces(&add_soap, namespaces);if (argc < 2) {printf("usage: %s <server_port> \n", argv[0]);exit(1);}else{m = soap_bind(&add_soap, NULL, atoi(argv[1]), 100);if (m < 0){soap_print_fault(&add_soap, stderr);exit(-1);}fprintf(stderr, "Socket connection successful: master socket = %d\n", m);for (;;){s = soap_accept(&add_soap);if (s < 0){soap_print_fault(&add_soap, stderr);exit(-1);}fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);soap_serve(&add_soap);soap_end(&add_soap);}}return 0;}int ns2__add(struct soap *add_soap, int num1, int num2, int *sum){*sum = num1 + num2;return 0;}d、接着写一个客户端,文件名为addclient.c#include "soapStub.h"int add(const char *server, int num1, int num2, int *sum){struct soap add_soap;int result = 0;soap_init(&add_soap);soap_set_namespaces(&add_soap, namespaces);soap_call_ns2__add(&add_soap, server, NULL, num1, num2, sum);printf("server is %s, num1 is %d, num2 is %d\n", server, num1, num2);if (add_soap.error){printf("soap error: %d, %s, %s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap));result = add_soap.error;}soap_end(&add_soap);soap_done(&add_soap);return result;}e、最后写一个测试代码,addtest.c#include <stdio.h>#include <stdlib.h>#include <string.h>int add(const char *server, int num1, int num2, int *sum);int main(int argc, char **argv){int result = -1;char server[128] = {0};int num1;int num2;int sum;if (argc < 4) {printf("usage: %s <ip:port> num1 num2 \n", argv[0]);exit(1);}strcpy(server,argv[1]);num1 = atoi(argv[2]);num2 = atoi(argv[3]);result = add(server, num1, num2, ∑);if (result != 0){printf("soap error, errcode=%d\n", result);}else{printf("%d + %d = %d\n", num1, num2, sum);}return 0;}f、到目前为止,自己的代码编写完毕,接下来编译服务端和客户端注意:编译的时候要把gsoap包里的源代码文件stdsoap2.c和stdsoap2.h拷贝到当前目录Makefile文件:GSOAP_ROOT = gsoap的解压路径/gsoapWSNAME = addCC = g++ -g -DWITH_NONAMESPACESINCLUDE = -I$(GSOAP_ROOT)SERVER_OBJS = soapC.o stdsoap2.o soapServer.o $(WSNAME)server.oCLIENT_OBJS = soapC.o stdsoap2.o soapClient.o $(WSNAME)client.o $(WSNAME)test.oall: serverserver: $(SERVER_OBJS)$(CC) $(INCLUDE) -o $(WSNAME)server $(SERVER_OBJS)client: $(CLIENT_OBJS)$(CC) $(INCLUDE) -o $(WSNAME)test $(CLIENT_OBJS)cl:rm -f *.o *.xml *.a *.wsdl *.nsmap soapH.h $(WSNAME)Stub.* $(WSNAME)server ns.xsd $(WSNAME)test然后执行make,即可生成addserver程序;执行make client,生成addtest程序g、运行程序执行./addserver 7777终端打印出:Socket connection successful: master socket = 3这是sever已经在前台运行起来了运行客户端./addtest ip地址:port num1 num2 返回加法的结果第一个简单的例子到此结束(2)使用wsdl2ha、建立一个新的目录,命名为weather命令:mkdir weatherb、利用gsoap 工具生成webserice 协义代码,wsdl2h从服务器下载头文件,soapcpp2相当于代码生成品,根据头文件生成相应的.c 文件和.nsmap 文件。
gsoap使用方法及心得(一)

gsoap使用方法及心得(一)gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在Windows、Linux、MAC OS和UNIX下使用C和C++语言编码,集成了SSL功能。
下载地址:官方网站:对于Windows平台下开发客户端,首先下载最新的gsoap_win32_2.7.6c.zip包,具体在以下地址:/sourceforge/gsoap2 /gsoap_win32_2.7.6c.zip首先查看gsoap的User's Guide,基本就能对gsoap有个全面的了解,通过阅读Sample里的例子程序深入。
然后搜索网上其它一些文章,比如:gSOAP简单多线程服务器程序:纯c的gSoap实现WebService:/2sky2sea/blog/item/40ec5555680279c1b74 5ae9b.html我以网上出现的实现一个简单的加法函数为例,讲讲我在操作过程中遇到的问题。
一、服务器端1、首先编写 add.h文件://gsoap ns service name: add//gsoap ns service namespace: http://localhost/add.wsdl//gsoap ns service location: http://localhost//gsoap ns service executable: add.cgi//gsoap ns service encoding: encoded//gsoap ns schema namespace: urn:addint ns__add( int num1, int num2, int* sum );2、用gsoap/bin目录下的soapcpp2.exe程序,生成一些文件。
可以把soapcpp2.exe拷贝到一add.h目录下,用cmd执行soapcpp2.exe add.h。
在这个目录下会自动生成许多将来有用的文件,如add.namap,soapH.h,soapC.cpp,soapClient.cpp,soapServer.cpp等文件。
gSOAP在Windows Mobile平台上的使用总结

gSOAP在Windows Mobile平台上的使用总结gSOAP是很好的东西,它弥补了C++库对Webservice支持的不足,让C++的开发者能够轻松使用Webservice,不过说轻松其实也不轻松,到目前为止,我没有用过什么开源的库是一到手就能很顺利地使用的,总是经过了这个那个的折腾,最后才能用,虽然很多问题也都是只差那么一丁点儿,但就是那么一丁点儿却让人焦头烂额。
Windows Mobile没落了……我不止一次提起这话,我甚至怀疑我现在开发的Windows Mobile 程序是不是最后一个获得较多用户的Windows Mobile程序,也许弄完了这个之后,也没什么人再会涉足这个领域了。
ASMX接口定义文件OK,废话不说了,言归正传,Webservice最最最典型的应用是什么?——更新天气,你看看Webservice的入门文章,都是拿天气更新作为范例,而我做的这个正好也是一个天气更新,接口是我定义的,具体就不贴出来了,总而言之我们要从WSDL这个接口文件出发,假设你已经有了这个WSDL文件了,文件名为“SSPWeatherService.asmx”。
(不懂WSDL的话建议先了解下Webservice)获取一份gSOAP并安装接着要去获取一份gSOAP的代码,地址是,我下载的版本是2.8.3,这是2011年6月更新的,在这前我下载了2.8.2,这两个版本用起来还有些微小的差别,哪个更好?当然是新的更好了。
下载完之后当然是解压缩,我是把它解压缩到“D:\gsoap”这个路径下。
然后给系统环境变量“path”增加这么一个路径:“D:\gsoap\gsoap\bin\win32\”,这完全是为了一会儿方便调用到“wsdl2h.exe”和“soapcpp2.exe”,否则你还得输入exe的完整路径。
根据asmx生成相关文件将刚才那个WSDL文件“SSPWeatherService.asmx”放到你的工作目录下,比如“D:\work\SSPWeatherUpdate_WS”,然后使用命令行工具,如下执行:<图1>其中涉及到两个命令:>wsdl2h SSPWeatherService.asmx -o SSPWeatherService.h>soapcpp2 SSPWeatherService.h -ID:\gsoap\gsoap\import -C -x -i第一个命令是根据WSDL文件生成相应的头文件,用-o参数指定生成的头文件的名称。
gSOAP快速使用步骤

gSOAP快速使用步骤用WebXml提供的“腾讯QQ在线状态WEB 服务”做示范。
Web 服务链接如下:[plain] view plaincopyprint?1.Endpoint: /webservices/qqOnlineWebService.asmx2.Disco : /webservices/qqOnlineWebService.asmx?disco3.WSDL : /webservices/qqOnlineWebService.asmx?wsdl一种简单使用gSOAP的步骤如下:[plain] view plaincopyprint?1.1. 另存/webservices/qqOnlineWebService.asmx?wsdl 为WSCheckQqOnline.wsdl2.2. 在命令行执行:3.wsdl2h -o WSCheckQqOnline.h WSCheckQqOnline.wsdl4.3. 在命令行执行:5.soapcpp2 -C -L -i -IE:\gSOAP\gsoap-2.8\gsoap\import -x WSCheckQqOnline.h6.4. 把第 3 步生成的下列 8 个文件添加到工程中:7.(1) soapStub.h // -> 头文件8.(2) soapH.h // -> 头文件9.(3) soapC.cpp // -> 源文件10.(4) soapqqOnlineWebServiceSoapProxy.h // -> 头文件11.(5) soapqqOnlineWebServiceSoapProxy.cpp // -> 源文件12.(6) qqOnlineWebServiceSoap.nsmap // -> 工程目录(当做 .cpp 文件)13.(7) stdsoap2.h // -> 头文件14.(8) stdsoap2.cpp // -> 源文件15. 5. 在 main.cpp 中先后添加:16.#include "qqOnlineWebServiceSoap.nsmap"17.#include "soapqqOnlineWebServiceSoapProxy.h"18. 6. 再补充。
gsoap实现onvif步骤

gsoap实现onvif步骤
gsoap是一种基于C/C++的SOAP开发工具,可以用于实现ONVIF 协议。
以下是使用gsoap实现ONVIF的步骤:
1. 下载gsoap的最新版本,并解压缩到本地目录中。
2. 通过WSDL文件生成C/C++的客户端和服务器代码。
可以使用命令行工具wsdl2h来生成头文件,然后使用soapcpp2生成C/C++代码。
3. 在生成的代码中,将所有的soap_call_xxx函数和soap_xxx 函数替换为gsoap提供的soap_call_nsx_xxx和soap_nsx_xxx函数。
其中,nsx是命名空间的前缀,可以根据实际情况进行修改。
4. 在代码中添加gsoap的头文件,并链接gsoap库文件。
5. 在客户端代码中,使用soap_init函数初始化SOAP环境,使用soap_free函数释放SOAP环境。
在服务器代码中,使用soap_serve 函数启动SOAP服务。
6. 在客户端代码中,使用soap_call_nsx_xxx函数调用ONVIF 协议中定义的各种操作。
在服务器代码中,实现ONVIF协议中定义的各种操作。
7. 调试代码时,可以使用soap_print_fault函数打印出SOAP 错误信息。
8. 在代码中实现必要的认证、加密等安全机制,以保护数据的安全性和完整性。
以上就是使用gsoap实现ONVIF的步骤。
需要注意的是,gsoap
的使用需要一定的SOAP和C/C++编程基础,建议先学习相关知识再进行实践。
gsoap使用总结

gsoap使⽤总结WebService、soap、gsoap基本概念WebService服务基本概念:就是⼀个应⽤程序,它向外界暴露出⼀个可以通过web进⾏调⽤的API,是分布式的服务组件。
本质上就是要以标准的形式实现企业内外各个不同服务系统之间的互调和集成。
soap概念:简单对象访问协议,是⼀种轻量的、简单的、基于 XML 的协议,它被设计成在WEB 上交换结构化的和固化的信息。
从这⾥的概念可以看得出来,soap是⼀个基于xml格式的web交互协议,⽽webservice是⼀种使⽤web⽅式实现的功能。
就好像是⽹络视频服务器和http的关系,就是这⾥的webservice服务器和soap的关系。
其实从历史上来说,先有的soap这种协议,然后微软⽤基于这种协议制作了webservice这种服务。
gsoap概念:是⼀种能够把C/C++语⾔的接⼝转换成基于soap协议的webservice服务的⼯具。
gSOAP简介gSOAP是⼀个开发SOAP和XML应⽤(它们组成了webservice)的⼯具,在英⽂中叫toolkit。
它是跨平台的,webservice的客户端和服务器端,都可以⽤它来辅助开发。
它主要的功能(特征)如下:C/C++数据绑定⼯具,⽀持XML-RPCfrom/to JSON from/to C/C++ serialization⽀持WSDL 1.1,2.0, SOAP 1.1, 1.2⽀持REST HTTP(S) 1.0/1.1 operations (GET,PUT,POST etc) for XML, JSON,etc⽀持MIME and MTOM 附件⽀持IPv4,IPv6, TCP 和UDP⽀持CGI,FastCGI⽀持嵌⼊到Apache,IIS中发布⾃带了⼀个Web server (multithreaded, SSL, compression)⽤于发布可适⽤于WinCE, Palm, Symbian, VxWorks, Andriod, iPhone等⼩设备...(拣主要的,其余忽略)gsoap下载地址gSOAP结构⽬前gSOAP的版本是2.8.12,作者认为,gSOAP的组织结构以及使⽤的⽅便性,在开源项⽬中是⽐较好的。
gsoap中文文档

2、符号规定
3.gSoap2.5 版与 gSOAP 2.4 版(或以前版本)的不同
1.介绍...............................................................................................................................................1 2、符号规定 ....................................................................................................................................3 3.gSoap2.5 版与 gSOAP 2.4 版(或以前版本)的不同........................................................3 4.gSoap2.2 版与 gSOAP 2.1 版(或以前版本)的不同........................................................3 5. gSoap2.x 版与 gSOAP 1.x 版的不同 ..................................................................................3 6、 ....................................................................................................................................................6 准备工作...........................................................................................................................................6 快速指南................................................................................................................................个 SOAP/XML 关于 C/C++ 语言的实现,从而让 C/C++语言开发 web 服务或客户端程序的工作变得轻松了很多。绝大多数的 C++web 服务工具包提供一组 API 函数类库来处理特定的 SOAP 数据结构,这样就使得用户必须改变程序结构来适应相关 的类库。与之相反,gSOAP 利用编译器技术提供了一组透明化的 SOAP API,并将与开发无 关的 SOAP 实现细节相关的内容对用户隐藏起来。gSOAP 的编译器能够自动的将用户定义 的本地化的 C 或 C++数据类型转变为符合 XML 语法的数据结构,反之亦然。这样,只用一 组简单的 API 就将用户从 SOAP 细节实现工作中解脱了出来,可以专注与应用程序逻辑的 实现工作了。gSOAP 编译器可以集成 C/C++和 Fortran 代码(通过一个 Fortran 到 C 的接口), 嵌入式系统,其他 SOAP 程序提供的实时软件的资源和信息;可以跨越多个操作系统,语 言环境以及在防火墙后的不同组织。 gSOAP 使编写 web 服务的工作最小化了。gSOAP 编译器生成 SOAP 的代码来序列化或反 序列化 C/C++的数据结构。gSOAP 包含一个 WSDL 生成器,用它来为你的 web 服务生成 web 服务的解释。gSOAP 的解释器及导入器可以使用户不需要分析 web 服务的细节就可以
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.4GSOAP工具的安装和使用7.4.1GSOAP安装GSOAP工具可以在WIN和UNIX两个系统平台下运行,这就使我们的程序在跨平台上有了基础。
工具的安装包可浏览其主页下载。
本DEMO的开发使用的版本为gsoap_win32_2.7.9l,工具的运行环境是Windows系统。
图7.12 Windows下的GSOAP安装包图7.13 LINUX或UNIX下的GSOAP安装包设置系统环境变量,这样可以很方便的使用GSOAP工具,如下为GSOAP的两个工具,我们将他们设置到可以在DOS下可直接使用的程序。
图7.14 GSOAP两个工具程序图7.15 GSOAP使用方法7.4.2生成客户端文件Wsdl2h.exe的参数说明参见7.5.1节图7.16 在DOS下使用wsdl2h.exe工具生成SendSMSClient.h文件图7.17 生成成功图7.18 生成的文件(短信为例)Soapcpp2.exe工具的参数说明参见7.5.2 节图7.19 根据.h生成客户端的文件图7.20 生成成功提示信息图7.21 生成的客户端文件表7.1 生成文件的说明其他文件在项目中没有使用,在此不做介绍,如需了解参看网络资料。
7.4.3生成服务端文件Wsdl2h.exe的参数说明参见7.5.1节图7.22 创建WEB SERVICE的.h文件图7.23 生成的文件Soapcpp2.exe工具的参数说明参见7.5.2 节图7.24 生成WEB SERVICE服务端文件图7.25 生成的服务端文件7.5GSOAP工具的参数soapcpp2.exe: gSOAP编译器,编译头文件生成服务器和客户端都需要的c/c++文件。
wsdl2h.exe: 编译wsdl文件生成c/c++头文件。
7.5.1wsdl2h.exe的使用wsdl2h是将wsdl定义转换成.h文件的工具。
主要有一些选项:-c代表转化成C代码。
-s代表不使用STL,取而代之需要在工程中包含stdsoap2.h和stdsoap2.cpp。
-o file代表指定输出文件名称。
通常情况下使用命令wsdl2h –s xxx.wsdl即可生成想要的.h文件详细参数说明为:Usage: wsdl2h [-a] [-c] [-d] [-e] [-f] [-g] [-h] [-I path] [-j] [-l] [-m] [-n name] [-N name] [-p] [-q name] [-r proxyhost:port] [-s] [-t typemapfile.dat] [-u][-v] [-w] [-x] [-y] [-z] [-_] [-o outfile.h] infile.wsdl infile.xsd http://www..-a generate indexed struct names for local elements with anonymous types -c generate C source code-d use DOM to populate xs:any and xsd:anyType elements-e don't qualify enum names-f generate flat C++ class hierarchy-g generate global top-level element declarations-h display help info-Ipath use path to find files-j don't generate SOAP_ENV__Header and SOAP_ENV__Detail definitions -l include license information in output-m use xsd.h module to import primitive types-nname use name as the base namespace prefix instead of 'ns'-Nname use name as the base namespace prefix for service namespaces-ofile output to file-p create polymorphic types with C++ inheritance with base xsd__anyType -qname use name for the C++ namespace for all service declarations-rhost:portconnect via proxy host and port-s don't generate STL code (no std::string and no std::vector)-tfile use type map file instead of the default file typemap.dat-u don't generate unions-v verbose output-w always wrap response parameters in a response struct (<=1.1.4 behavior) -x don't generate _XML any/anyAttribute extensibility elements-y generate typedef synonyms for structs and enums-z generate pointer-based arrays for backward compatibility < gSOAP 2.7.6e -_ don't generate _USCORE (replace with UNICODE _x005f)infile.wsdl infile.xsd http://www... list of input sources (if none: use stdin)7.5.2soapcpp2.exe的使用soapcpp2是生成源码的工具,从某种意义上来说,WebService和ICE相当的相像。
都是网络通信协议的封装方式,所不同的是WebService使用的是公开协议。
没有特殊选项的情况下,gsoap不需要依赖其他的链接库。
soapcpp2的主要选项有(注意区分大小写):-C代表生成客户端代码。
-S代表生成服务端代码。
-L代表不生成soapClientLib/soapServerLib-c代表仅生成c代码-i代表使用Proxy通常情况下使用命令soapcpp2 –S/-C –L -i xxx.h详细参数说明为:Usage: soapcpp2 [-1|-2] [-C|-S] [-L] [-a] [-c] [-d path] [-e] [-h] [-i] [-I path;path;...] [-l] [-m] [-n] [-p name] [-s] [-t] [-v] [-w] [-x] [infile]-1 generate SOAP 1.1 bindings-2 generate SOAP 1.2 bindings-C generate client-side code only-S generate server-side code only-L don't generate soapClientLib/soapServerLib-a use value of SOAPAction HTTP header to dispatch method at server side-c generate C source code-dpath use path to save files-e generate SOAP RPC encoding style bindings-h display help info-i generate service proxies and objects inherited from soap struct-Ipath use path(s) for #import-l generate linkable modules (experimental)-m generate Matlab(tm) code for MEX compiler-n use service name to rename service functions and namespace table-pname save files with new prefix name instead of 'soap'-s generate deserialization code with strict XML validation checks-t generate code for fully xsi:type typed SOAP/XML messaging-v display version info-w don't generate WSDL and schema files-x don't generate sample XML message filesinfile header file to parse (or stdin)7.5.3stdsoap2.h和stdsoap2.cpp文件说明图7.26 stdsoap2.cpp和stdsoap2.h文件这两个文件来自GSOAP工具目录中,也是我们需要的文件,在添加了soapcpp2生成的文件外还需要将这两个文件添加到我们工程的目录下。