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

测试结果:
[root@192 calc]# ./client
520+250=770
520-250=270
520*250=130000
520/250=2.08

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章