您的位置:首页 > 其它

gsoap编译与简单使用

2014-09-26 10:49 155 查看
转载地址:http://blog.csdn.net/yujun_huoxu/article/details/7480250

1 官网下载gsoap2.8.8.zip

2 安装gsoap

a):如果在windows下 直接解压缩 会有一个gsoap2.8的目录。在\gsoap-2.8\gsoap\bin\ 目录下面有对应的

b):在linux下解压成gsoap2.8的目录,安装。安装步骤

./configure

make

make install

装gsoap 需要安装openssl 才能安装成功

c)windows下我没有安装。直接用bin目录下面的 wsdl2h 和soapcpp2工具

linux安装之后 wsdl2h 和soapcpp2 工具直接可以用

wsdl2h 根据webserveic生成 .h文件,soapcpp2根据生成.h文件生成相应的调用文件

这两个工具使用方法如下:

注1 :wsdl2h的用法(WSDL/schema 解析和代码生成器) wsdl2h [opt] 头文件名 WSDL文件名或URL wsdl2h常用选项

-o 文件名,指定输出头文件

-n 名空间前缀 代替默认的ns

-c 产生纯C代码,否则是C++代码

-s 不要使用STL代码

-t 文件名,指定type map文件,默认为typemap.dat

-e 禁止为enum成员加上名空间前缀 type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写

在本例中,使用的是:

wsdl2h -s -o calc.h http://www.cs.fsu.edu/~engelen/calc.wsdl
参数s就表示生成不带STL的C/C++语法结构的头文件calc.h。如果不用s就会生成带STL的头文件,这样,在后边的编译中需要加入STL的头 stlvector.h,位于:gsoap/import/目录下。

注2 :soapcpp2的用法(编译和代码生成器) soapcpp2 [opt] 头文件名 soapcpp2常用选项

-C 仅生成客户端代码

-S 生成服务器端代码

-L 不要产生soapClientLib.c和soapServerLib.c文件

-c 产生纯C代码,否则是C++代码(与头文件有关)

-I 指定import路径(见上文)

-x 不要产生XML示例文件

-i 生成C++封装(代理),客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

d)例子:

i):vi add.h

添加如下内容:int ns__add( int num1, int num2, int* sum );

ii):soapcpp2 -S -x -L -i add.h 只生成C++的 服务器文件

会生成如下文件:

soapStub.h soapServer.cpp soapH.h soapC.cpp ns.nsmap 等文件

iii)vi addServer.cpp

如下内容:

#include "soapH.h"

#include "add.h"

#include "ns.nsmap"

#include <stdio.h>

int main(int argc, char* argv[])

{

int m, s; /* master and slave sockets */

struct soap add_soap;

soap_init(&add_soap);

//soap_set_namespaces(&add_soap, add_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);//该句说明该server的服务

soap_end(&add_soap);

}

}

return 0;

}

//server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数

int ns__add(struct soap *add_soap, int num1, int num2, int *sum)

{

*sum = num1 + num2;

return 0;

}

iv):把gsoap-2.8\gsoap\目录下面的 stdsoap2.cpp stdsoap.h拷贝到 该工程的目录下面

v):gcc编译 g++ soapC.cpp soapServer.cpp stdsoap2.cpp addServer.cpp -o addServer

vi)运行:./addServer 即可实现一个简单的服务器程序

g++ addSerer.cpp so
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: