欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux下gSoap的安装使用

程序员文章站 2022-07-14 17:06:24
...

下篇将介绍在项目中怎么使用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