Linux下gSoap的安装使用
下篇将介绍在项目中怎么使用gSoap。
1、下载gSoap。
gSoap下载地址:
http://sourceforge.net/projects/gsoap2/files/
下载好了会有一个名字为gsoap_2.8.70.zip的压缩包。
2、安装gSoap。
【a】解压gsoap_2.8.70.zip。
unzip gsoap_2.8.70
【b】进入解压后生成的文件夹
cd gsoap-2.8/
【c】切换root用户。
输入命令:su root
输入密码
【d】配置编译环境。
./configure --prefix=/usr/local/gSoap2.8
【e】编译链接。
make
【f】 安装。
make install
检查/usr/local/下有没有多一个gSoap2.8的目录。
3、使用gsoap2.8。(demo)。
【a】编写calc.h。
新建一个calc目录。
mkdir calc
编写calc.h。
vim calc.h
//gsoap ns service name: calc Simple ca lculator service
//gsoap ns service protocol: SOAP
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://localhost/calc.wsdl
//gsoap ns service location: http://localhost/server.cgi
//gsoap ns schema namespace: urn:calc
//gsoap ns service method: add Sums two values
int ns__add(double a, double b, double *result);
//gsoap ns service method: sub Subtracts two values
int ns__sub(double a, double b, double *result);
//gsoap ns service method: mul Multiplies two values
int ns__mul(double a, double b, double *result);
//gsoap ns service method: div Divides two values
int ns__div(double a, double b, double *result);
注意:
a、以上的几行注释中,gsoap ns service不能删除,但可以修改
b、ns__add等的ns后面是两个下划线
【b】使用soapcpp2 生成相关文件。
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)。
本例是:/usr/local/gSoap2.8/bin/soapcpp2 -L -i -x calc.h
注:/usr/local/gSoap2.8/是安装目录。
/usr/local/gSoap2.8/bin/soapcpp2 -L -i -x calc.h
【c】编写服务端代码calcserver.cpp
#include "soapcalcService.h"
#include "calc.nsmap"
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
calcService calc;
int port = 8888;
if (calc.run(port))
{
cerr << "Calc service run failed" << endl;
exit (0);
}
return 0;
}
int calcService::add(double a, double b, double *result)
{
*result = a + b;
return SOAP_OK;
}
int calcService::sub(double a, double b, double *result)
{
*result = a - b;
return SOAP_OK;
}
int calcService::mul(double a, double b, double *result)
{
*result = a * b;
return SOAP_OK;
}
int calcService::div(double a, double b, double *result)
{
if (b)
{
*result = a / b;
return SOAP_OK;
}
else
{
return SOAP_FAULT;
}
}
编写好后将stdsoap2.h 复制到当前目录下。
cp /usr/local/gSoap2.8/include/stdsoap2.h .
用以下命令进行服务端的编译。
g++ calcserver.cpp soapcalcService.cpp soapC.cpp -o server -L/usr/local/gSoap2.8/lib/ -lgsoap++
编译好后当前目录下会出现server的可执行文件。
【d】编写客户端代码calcclient.cpp
#include "soapcalcProxy.h"
#include "calc.nsmap"
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
double a = 520, b = 250, result;
calcProxy calc;
calc.soap_endpoint = "http://localhost:8888";
calc.add(a, b, &result);
cout << a << "+" << b << "=" << result << endl;
calc.sub(a, b, &result);
cout << a << "-" << b << "=" << result << endl;
calc.mul(a, b, &result);
cout << a << "*" << b << "=" << result << endl;
calc.div(a, b, &result);
cout << a << "/" << b << "=" << result << endl;
return 0;
}
编译客户端代码
g++ calcclient.cpp soapcalcProxy.cpp soapC.cpp -o client -L/usr/local/gSoap2.8/lib/ -lgsoap++
编译完成后当前目录下会出现client的可执行文件。
【e】测试。
./server &
./client
测试结果:
[[email protected] calc]# ./client
520+250=770
520-250=270
520*250=130000
520/250=2.08
上一篇: Retrofit 上传图片
下一篇: 动环监控系统中B接口的实现-c语言版