在Windows下用gSoap实现简单加法实例
实现一个简单的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实现简单加法实例的更多相关文章
- memcache的windows下的安装和简单使用
原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...
- JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java
JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...
- Python:tesserocr 在 windows 下的安装及简单使用
tesserocr 是 python 的一个 OCR 库,它是对 tesseract 做的一层 Python API 封装,所以他的核心是tesseract. tesseract 的安装见 https ...
- windows下虚拟环境virtualenv的简单操作
使用豆瓣源安装(推荐) [推荐] python3.X安装和pip安装方法 pip install -i https://pypi.douban.com/simple XXX 1.安装virtualen ...
- 同一台windows下配置安装多个mysql实例,实现主从同步
一.安装多个mysql 参见: https://blog.csdn.net/wrh_csdn/article/details/80198795 https://www.cnblogs.com/qjoa ...
- 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...
- Windows下用python编写简单GUI程序的方法
Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py #!C:\Python27\python.exe ...
- windows下安装redis以及简单的事例
1.安装服务端下载地址:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload我下载了一个 redis-2.0.0服务器包,解压 ...
- Windows下安装GnuRadio最简单的方法(没有之一)
作者在Windows XP SP3 32位下亲测通过,理论上Win7也没问题. 1. 如果系统中安装有Python,请先把Python卸载. 2. 下载安装Python(x,y) 2.7.5.0, 下 ...
随机推荐
- 常用apt cli
常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get ...
- 如何把jquery 的dialog和ztree结合
第一步:先准备好juqury-ui.ztree 的js文件和css 文件 第二步:example.jsp文件代码中写 ..引入jqueryui.ztree 的js和css文件 <body> ...
- 浅谈js观察者模式
观察者模式又叫发布订阅模式,它可以让多个观察者对象同时监听某一个主题对象,即在一个事件发生时,不同的对象迅速对其进行相应.就比如当又人闯红灯,不同的人对这件事迅速发起响应,当然这个比喻不太恰当,不过在 ...
- 判断数组中有没有某个键 isset 和 array_key_exists 的效率比较
判断数组中有没有某个键 isset 和 array_key_exists 谁的效率高呢? 使用 array_key_exists 代码如下 结果如下 如果使用 isset 代码如下 结果如下: 很明显 ...
- git 删除分支和删除文件夹
1.删除分支 1.1查看所有分支: git branch -a 得到结果: 1.2删除HEAD分支 git push origin --delete HEAD 2.删除文件夹 2.1 查看本地分支下的 ...
- Python递归遍历目录下所有文件
#自定义函数: import ospath="D:\\Temp_del\\a"def gci (path): """this is a stateme ...
- 利用Continuous Testing实现Eclipse环境自己主动单元測试
当你Eclipse环境中改动项目中的某个方法时,你可能因为各种原因没有执行单元測试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...
- 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!
原文:http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 前言:1.不经历风雨,怎能见彩虹.2.充分利用BaiDu.google等搜索引擎查找资料 ...
- oracle数据库导入导出的dmp(转)
window下: imp必须要dba用户,所以用sysdba用户登陆,然后给予chnlmgr用户dba权限 grant connect,resource,dba to chnlmgr; 全部导入 im ...
- cocos2d-x jsb + cocosbuider 适配iphone5 尺寸
最简单的适配iphone5的方案,应该算是直接用一块图片补上多出来的区域了: 1:Iphone5分辨率为 1136* 640 , 需要在cocosbuilder中将ccb修改为对应的尺寸: Docum ...