zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    preprocess
    数组
    共用体
    动态内存管理函数
    C链表
    文件的定位与出错检查
    字符串读写函数
    C文件操作
    位运算
    爱好-超级IP:超级IP
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2478219.html
Copyright © 2011-2022 走看看