gsoap 使用


原文鏈接

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM