博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gsoap 使用
阅读量:6191 次
发布时间:2019-06-21

本文共 2329 字,大约阅读时间需要 7 分钟。

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

转载地址:http://surda.baihongyu.com/

你可能感兴趣的文章
[译]Android 生命周期备忘录 — 第一部分:单一 Activities
查看>>
Android内存泄露浅析
查看>>
【Android】仿斗鱼滑动拼图验证码控件
查看>>
让 UIWebview 拥有超强的图片处理能力
查看>>
异步社区本周(5.14-5.20)半价电子书
查看>>
Xcode 高级调试技巧
查看>>
理解DDoS防护本质:基于资源较量和规则过滤的智能化系统
查看>>
js 中基础数据结构数组去重问题
查看>>
Android Gradle(一)为什么现在要用Gradle?
查看>>
Python 简单入门指北(试读版)
查看>>
技术变化那么快,程序员如何做到不被淘汰?
查看>>
虚拟DOM总结
查看>>
阿里资深技术专家总结:要怎样努力才可以成为公司主力架构师
查看>>
k-means 聚类算法
查看>>
我们来说一说TCP神奇的40ms
查看>>
基于AOP的MVP框架(一)GoMVP的使用
查看>>
拜托,面试别再问我回文链表了!!!(leetcode 234)
查看>>
iOS冰与火之歌 – UAF and Kernel Pwn
查看>>
通过nginx配置文件抵御攻击
查看>>
攻击JavaWeb应用[7]-Server篇[1]
查看>>