实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数,然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来。

1、在gSoap的官网上下载文件夹,本人的版本是gsoap-win32-2.8

下载地址:http://sourceforge.net/projects/gsoap2

官方网站:http://genivia.com/Products/gsoap/index.html

2、新建一个文件夹server

3、将gSoap解压出来后,将\gsoap-win32-2.8的soapcpp2.exe放到server里面

用vc在server建立一个add.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* sum );

4、运行cmd跳到server文件夹,输入命令soapcpp2.exe add.h

这个时候文件夹会有以下这些文件了

add.add.req.xml

add.add.res.xml

add.h

add.nsmap

add.wsdl

ns.xsd

soapaddObject.h

soapaddProxy.h

soapC.cpp

soapClient.cpp

coapClientLib.cpp

soapcpp2.exe

soapH.h

soapServer.cpp

soapServerLib.cpp

soapStub.h

在命令行里会有一个警告,Cannot use document style with SOAP encoding<detected at line 8 in add.h>,这个可以不用管他,不知道有什么用,不过最后会显示Compilation successful。

5、将\gsoap-win32-2.8的stdsoap2.cpp与stdsoap2.h两个文件放到server里面,这个时候gSoap已经产生了C/C++源代码了,接下来最终要的就是要创建一个工程来编译他们了

6、建立一个控制台工程,名字为server(我前面的server文件夹得路径为F:/server,那么这个时候创建的工程路径为F:/,名字为server),在工程下面新建一个addserver.cpp的源文件

源文件中的代码如下

#include <stdio.h>

#include <stdlib.h>

#include "stdsoap2.h"

#include "add.h"

#include "add.nsmap"

int main(int argc, char* argv[])

{

int m, s;

struct soap add_soap;

soap_init(&add_soap);

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;

}

7.添加其他文件有7个add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapServer.cpp、stdsoap2.cpp(一个一个的添加,免得出错),在project-setting中将添加进来的3个源文件的C/C++选项的Category设置为Precompiled Headers

8.在project-setting-Link在Object/library modules后添加一个wsock32.lib

9.编译,如果这个时候有编译错误,估计是文件添加和add.h生成代码这两步又错误,可以将其推到,多试几次如果编译成功后,在Debug文件夹里面会有一个server.exe的文件,

打开cmd,转到Debug文件下,输入server.exe 4567,接着在IE中输入http://localhost:4567,如果显示xml页面,说明程序已经启动。

10.客户端代码编写,步骤与server类似,新建一个client文件夹,重复3-5步,接着建立一个控制台工程,名字为client(我前面的client文件夹的路径为

F:/client那么这个时候创建的工程路径为F:/,名字为client),在工程下面新建一个addclient.cpp的源文件

源文件中的代码如下:

#include <stdio.h>

#include <stdlib.h>

#include "stdsoap2.h"

#include "soapH.h"

#include "add.nsmap"

int add(const char* server, int num1, int num2, int *sum);

int main(int argc, char **argv)

{

int result = -1;

char* server="http://localhost:4567";

int num1 = 0;

int num2 = 0;

int sum = 0;

if( argc < 3 )

{

printf("usage: %s num1 num2 \n", argv[0]);

exit(0);

}

num1 = atoi(argv[1]);

num2 = atoi(argv[2]);

result = add(server, num1, num2, &sum);

if (result != 0)

{

printf("soap err,errcode = %d\n", result);

}

else

{

printf("%d+%d=%d\n", num1, num2, sum );

}

return 0;

}

int add(const char* server, int num1, int num2, int *sum)

{

struct soap add_soap;

int result = 0;

soap_init(&add_soap);

soap_call_soap_call_ns__add( &add_soap, server, "", num1, num2, sum );

if(add_soap.error)

{

printf("soap error:%d,%s,%s\n",add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );

result = add_soap.error;

}

soap_end(&add_soap);

soap_done(&add_soap);

return result;

}

11、添加其他文件有7个add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapClinet.cpp、stdsoap2.cpp(一个一个的添加,免得出错),在project-setting中将添加进来的3个源文件的C/C++选项的Category设置为Precompiled Headers(和server不同的是一个添加soapServer.cpp文件而另一个是添加soapClient.cpp文件)

12、在project-setting-Link在Object/library modules后添加一个wsock32.lib,之后编译,编译成功后在Debug文件夹下会有一个client.exe文件

13、运行一个cmd跳到server/Debug下输入 server.exe 4567

14、运行另一个cmd跳到client/Debug下输入 client.exe 1 2

这个时候就会出现了1+2=3

15、如果server.exe与client.exe两个文件在两台不同的电脑上,那么将client.exe的代码char* server="http://localhost:4567";那行将localhost改为服务器的ip地址再重新编译即可

在Windows下用gSoap实现简单加法实例的更多相关文章

  1. memcache的windows下的安装和简单使用

    原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...

  2. JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java

    JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...

  3. Python:tesserocr 在 windows 下的安装及简单使用

    tesserocr 是 python 的一个 OCR 库,它是对 tesseract 做的一层 Python API 封装,所以他的核心是tesseract. tesseract 的安装见 https ...

  4. windows下虚拟环境virtualenv的简单操作

    使用豆瓣源安装(推荐) [推荐] python3.X安装和pip安装方法 pip install -i https://pypi.douban.com/simple XXX 1.安装virtualen ...

  5. 同一台windows下配置安装多个mysql实例,实现主从同步

    一.安装多个mysql 参见: https://blog.csdn.net/wrh_csdn/article/details/80198795 https://www.cnblogs.com/qjoa ...

  6. 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)

    原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...

  7. Windows下用python编写简单GUI程序的方法

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py #!C:\Python27\python.exe ...

  8. windows下安装redis以及简单的事例

    1.安装服务端下载地址:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload我下载了一个 redis-2.0.0服务器包,解压 ...

  9. Windows下安装GnuRadio最简单的方法(没有之一)

    作者在Windows XP SP3 32位下亲测通过,理论上Win7也没问题. 1. 如果系统中安装有Python,请先把Python卸载. 2. 下载安装Python(x,y) 2.7.5.0, 下 ...

随机推荐

  1. 使用WIF实现单点登录Part III —— 正式实战 -摘自网络

    经过前两篇文章,估计大家对WIF已经有比较充分的认识了,估计大家在经过了枯燥的理论以后,肯定是摩拳擦掌赶紧付诸于行动了.没办法,咱们程序员就是这个毛病.那好吧,我也不那么多废话了,直接进入正题吧. 我 ...

  2. maven工程-eclipse红叹号

    从公司代码库中check下一份完整代码,在其他开发机器上都能正确构建,唯独一台机器无法正确构建,查证了2个小时,最后还是死在了最基础的问题上 maven工程 工程如下,创建了一个新的maven工程,j ...

  3. Unity手游之路<六>游戏摇杆之Easy Touch 3教程

    之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...

  4. SQL 左外连接,右外连接,全连接,内连接

    原文地址  连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行.             连接可 ...

  5. AptanaStudio3 安装在win7 64bit时遇到的问题

    最近在研究前端语言,想起可以使用AptanaStudio这个前端利器,没想到安装时却遇到波折.先从网上下载了Aptana版本 3.6.0 64bit问题1 安装进度缓慢,第一次安装时,显示downlo ...

  6. HDU 4849-Wow! Such City!(最短路)

    Wow! Such City! Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Other ...

  7. vs目录(继承的值)配置

    突然间,想在vs中添加自己的目录,这样以后再新建项目后,就不用再麻烦的手动添加了,比如让新建的项目都继承我的目录D:\MyInc. 事例:让新建的工程包含的目录中自动继承目录D:\MyInc 修改它的 ...

  8. Android Studio-ApplicationId 与 PackageName

    BuildType 中所设置的『applicationIdSuffix』属性,按照这个属性的字面翻译为:『applicationId 的后缀』 Android 应用都有自己的包名.包名是设备上每个应用 ...

  9. VMware虚拟机安装Linux英文改中文系统并更新yum安装输入法

    今天用VMware Workstation11时,出现了个"难题",在选择了系统盘后(我用iso镜像centos6.5)VMware会提示高速安装,安装后系统是英文版,并且找不到系 ...

  10. GOOGLE------Reilly_Open_Source_Award

    https://en.wikipedia.org/wiki/O%27Reilly_Open_Source_Award#2016