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

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