1. 环境
    VS2008,gsoap_2.8,win7
  2. 实例场景:在客户端输入一个字符串,然后传递给服务端计算字符串长度并返回给客户端(附加一些加减乘除法的实现);
  3. 将..\gsoap-2.8\gsoap\bin\win32中的两个exe文件所在路径加入环境变量中,后面有用;
  4. 新建一个文件夹,设计一个calculator.h文件,如下(前面几行的注释我也不知道有啥用)
     //gsoap ns service name: add
    //gsoap ns service namespace: http://localhost/add.wsdl
    //gsoap ns service location: http://localhost
    //gsoap ns service executable: add.cgi
    //gsoap ns service encoding: encoded
    //gsoap ns schema namespace: urn:add
    int ns__add(int num1, int num2, int* result );
    int ns__sub(int num1, int num2, int* result );
    int ns__mult( int num1, int num2, int *result);
    int ns__divid( int num1, int num2, int *result);
    int ns__Hello(char* str,int *len);
  5. 在该文件夹中打开cmd(方法ctrl+右键 --》在此处打开命令窗口),输入命令:soapcpp2.exe calculator.h
    有关gsoap的命令用法自行百度;
  6. 你会发现生成很多很多文件
  7. 利用VS2008创建一个calServer的工程,将calculator.h  add.nsmap soapC.cpp soapServer.cpp soapH.h soapStub.h放入该工程,并且将gsoap-2.8\gsoap下的stdsoap2.h stdsoap2.cpp也添加到该工程;添加完后,在项目属性中的链接器--输入--附加依赖项 中输入wsock32.lib;
  8. 在calServer中添加一个main.cpp,代码如下:
     #include "soapH.h"
    #include "add.nsmap"
    #include "stdio.h"
    #include <iostream>
    using namespace std; int main( int argc, char *argv[])
    {
    struct soap *CalculateSoap = soap_new(); //创建一个soap
    int iSocket_master = soap_bind(CalculateSoap, NULL, , ); //绑定到相应的IP地址和端口()NULL指本机,
    //10000为端口号,最后一个参数不重要。
    if (iSocket_master< ) //绑定出错
    {
    soap_print_fault(CalculateSoap, stderr);
    exit(-);
    }
    printf("SoapBind success,the master socket number is:%d\n",iSocket_master); //绑定成功返回监听套接字 while()
    {
    int iSocket_slaver = soap_accept(CalculateSoap);
    if (iSocket_slaver < )
    {
    soap_print_fault(CalculateSoap, stderr);
    exit(-);
    }
    printf("Get a new connection,the slaver socket number is:%d\n",iSocket_slaver); //绑定成功返回监听套接字
    soap_serve(CalculateSoap);
    soap_end(CalculateSoap);
    }
    soap_done(CalculateSoap);
    free(CalculateSoap); return ;
    } /*加法的具体实现*/
    int ns__add(struct soap *soap, int num1, int num2, int* result )
    {
    if (NULL == result)
    {
    printf("Error:The third argument should not be NULL!\n");
    return SOAP_ERR;
    }
    else
    {
    (*result) = num1 + num2;
    return SOAP_OK;
    }
    return SOAP_OK;
    } /*减法的具体实现*/
    int ns__sub(struct soap *soap,int num1, int num2, int* result )
    {
    if (NULL == result)
    {
    printf("Error:The third argument should not be NULL!\n");
    return SOAP_ERR;
    }
    else
    {
    (*result) = num1 - num2;
    return SOAP_OK;
    }
    return SOAP_OK;
    } /*乘法的具体实现*/
    int ns__mult(struct soap *soap, int num1, int num2, int *result)
    {
    if (NULL == result)
    {
    printf("Error:The third argument should not be NULL!\n");
    return SOAP_ERR;
    }
    else
    {
    (*result) = num1 * num2;
    return SOAP_OK;
    }
    return SOAP_OK;
    } /*除法的具体实现*/
    int ns__divid(struct soap *soap, int num1, int num2, int *result)
    {
    if (NULL == result || == num2)
    {
    printf("Error:The second argument is 0 or The third argument is NULL!\n");
    return SOAP_ERR;
    }
    else
    {
    (*result) = num1 / num2;
    return SOAP_OK;
    }
    return SOAP_OK;
    } int ns__Hello(struct soap *soap, char *str, int *len)
    {
    /*if (NULL == result)
    {
    printf("Error:The third argument should not be NULL!\n");
    return SOAP_ERR;
    }
    else
    {
    cout << result <<endl;
    return SOAP_OK;
    }*/
    //if (NULL == result)
    cout << str <<endl;
    (*len) = strlen(str);
    return SOAP_OK; }
  9. Server端完成,可以运行了。
  10. 客户端:利用VS2008创建一个calClient的工程,将calculator.h  add.nsmap soapC.cpp soapClient.cpp soapH.h soapStub.h放入该工程,并且将gsoap-2.8\gsoap下的stdsoap2.h stdsoap2.cpp也添加到该工程;添加完后,在项目属性中的链接器--输入--附加依赖项 中输入wsock32.lib;
  11. 在calClient中添加一个main.cpp,代码如下:
     #include "soapH.h"
    #include "add.nsmap"
    #include "stdio.h"
    #include <iostream>
    using namespace std; int main( int argc, char *argv[])
    {
    printf("The Client is runing...\n");
    int num1 = ;
    int num2 = ;
    int result = ; struct soap *CalculateSoap = soap_new();
    //soap_init(CalculateSoap);
    注意改你的ip,端口10000不改
    char * server_addr = "http://xx.x.x.x:10000"; int iRet = soap_call_ns__add(CalculateSoap,server_addr,"",num1,num2,&result);
    if ( iRet == SOAP_ERR)
    {
    printf("Error while calling the soap_call_ns__add");
    }
    else
    {
    printf("Calling the soap_call_ns__add success。\n");
    printf("%d + %d = %d\n",num1,num2,result);
    } iRet = soap_call_ns__sub(CalculateSoap,server_addr,"",num1,num2,&result);
    if ( iRet == SOAP_ERR)
    {
    printf("Error while calling the soap_call_ns__sub");
    }
    else
    {
    printf("Calling the soap_call_ns__sub success。\n");
    printf("%d - %d = %d\n",num1,num2,result);
    } iRet = soap_call_ns__mult(CalculateSoap,server_addr,"",num1,num2,&result);
    if ( iRet == SOAP_ERR)
    {
    printf("Error while calling the soap_call_ns__mult");
    }
    else
    {
    printf("Calling the soap_call_ns__mult success。\n");
    printf("%d * %d = %d\n",num1,num2,result);
    } iRet = soap_call_ns__divid(CalculateSoap,server_addr,"",num1,num2,&result);
    if ( iRet == SOAP_ERR)
    {
    printf("Error while calling the soap_call_ns__divid");
    }
    else
    {
    printf("Calling the soap_call_ns__divid success。\n");
    printf("%d / %d = %d\n",num1,num2,result);
    }
    char *str = new char[];
    cin.getline(str,);
    cout << str <<endl;
    int len;
    iRet = soap_call_ns__Hello(CalculateSoap,server_addr,"",str,&len);
    if ( iRet == SOAP_ERR)
    {
    printf("Error while calling the soap_call_ns__add");
    }
    else
    {
    cout << str << " length is " << len <<" success!\n";
    } soap_end(CalculateSoap);
    soap_done(CalculateSoap);
    free(CalculateSoap); return ;
    }
  12. Client端完成,可以先运行Server,在运行Client看看效果。
    注意:客户端和服务端可以再两台电脑上允许并访问。

gsoap入门实例的更多相关文章

  1. React 入门实例教程(转载)

    本人转载自: React 入门实例教程

  2. struts入门实例

    入门实例 1  .下载struts-2.3.16.3-all  .不摆了.看哈就会下载了. 2  . 解压  后 找到 apps 文件夹. 3.    打开后将 struts2-blank.war   ...

  3. Vue.js2.0从入门到放弃---入门实例

    最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用 ...

  4. wxPython中文教程入门实例

    这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下     wxPython中文教程入门实例 wx.Window 是一个基类 ...

  5. Omnet++ 4.0 入门实例教程

    http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...

  6. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

  7. Node.js入门实例程序

    在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...

  8. Java AIO 入门实例(转)

    Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: public class SimpleServer { public SimpleServer(int port ...

  9. Akka入门实例

    Akka入门实例 Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. Actor模型并非什么新鲜事物,它由Carl Hew ...

随机推荐

  1. 导航栏 .active激活

    参考 :使用angularjs写一个导航栏控制器 1.点击其中一个li其他的class不影响 2.点击其中一个li其他的class影响 <!DOCTYPE html> <html l ...

  2. java中判断字符串是否为数字的方法的几种方法

    1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ ...

  3. SoapUI简介和入门实例解析

    SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Ecl ...

  4. iOS蓝牙心得

    1.获取蓝牙mac地址 因为安卓不能得到uuid,所以,在要同步的时候要将uuid转换成mac地址,下面是转换方法 [peripheral discoverServices:@[[CBUUID UUI ...

  5. asp.net core权限模块的快速构建

    大部分系统都会有权限模块,别人家系统的权限怎么生成的我不知道,我只知道这样做是可以并且挺好的. 文章中只对asp.net core的部分代码进行说明 呃 记录~,mvc版本自行前往仓库查阅 代码中的一 ...

  6. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  7. MMORPG战斗系统随笔(二)、浅谈场寻路Flow Field PathFinding算法

    转载请标明出处http://www.cnblogs.com/zblade/ 今天给大家带来一篇游戏中寻路算法的博客.去年,我加入一款RTS的游戏项目,负责开发其中的战斗系统,战斗系统的相关知识,属于游 ...

  8. 进入css3动画世界(二)

    进入css3动画世界(二) 今天主要来讲transition和transform入门,以后会用这两种属性配合做一些动效. 注:本文面向前端css3动画入门人员,我对这个也了解不深,如本文写的有纰漏请指 ...

  9. mysql 时间函数 时间转换函数

    时间函数 Now 获取当前时间 current_timestamp 获取当前时间 localtimestamp 时间转换 UNIX_TIMESTAMP    "2009-09-15 00:0 ...

  10. Digital Square 搜索

    Digital Square Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Subm ...