20160421 VC++6.0环境下gSOAP的使用

一、gSOAP简介

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP
API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。

二、gSOAP下载地址

http://www.genivia.com/products.html

下载下来解压以后文件夹如下:

其中gsoap中的两个文件:

以及如下路径两个文件复制出来放到一个文件夹下,稍后有用:

拷出来以后总共是如下四个文件:

三、实现简单加法实例

基本功能:实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数,

然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来。

1、新建一个文件夹server;

2、将gSoap解压出来后的四个文件放到server里面;

3、在server文件夹下建立一个add.h的头文件,代码如下:

<span style="font-size:18px;">//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);</span>

函数返回值必须是int,然后跟"ns__"(两个下划线),最后一个参数必须是引用类型或者指针类型(需要将值传出来)。

4、运行cmd跳到server文件夹,输入命令soapcpp2.exe add.h后,该文件夹显示如下(拷贝一份出来用于后面client):

5、用VC6.0新建一个Win32控制台应用程序(Empty),名字为server(我前面的server文件夹得路径为D:/add/server,那么这个时候创建的工程路径为D:/add/,名字为server),在工程下面新建一个addserver.cpp的源文件,源文件中的代码如下:

<span style="font-size:18px;">#include <stdio.h>
#include <stdlib.h>
#include "stdsoap2.h"
#include "add.h"
#include "add.nsmap"
#include "windows.h"
int main(int argc, char* argv[])
{
	int m, s;
	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;
}</span>

6、添加其他文件有7个add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapServer.cpp、stdsoap2.cpp,

在project-setting中将添加进来的3个源文件的C/C++选项的Category设置为Precompiled Headers(只要改一个其他都改了):

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

8、编译,如果这个时候有编译错误,估计是文件添加和add.h生成代码这两步有错误,如果是“sockaddr_storage未定义”,那么可以自己在上面添加如下代码(添加在宏下面):

<span style="font-size:18px;">struct sockaddr_storage {
 u_char sa_len;
 u_char sa_family;
 u_char padding[128];
 };</span>

到此应该没有大的错误了,如果还有,那么可以定位到那句话,将它注释掉(一般可以这么做)。

如果编译成功后,在Debug文件夹里面会有一个server.exe的文件,

打开cmd,转到Debug文件下,输入server.exe 4567,接着在IE中输入http://localhost:4567

,如果显示xml页面,说明程序已经启动。

9、客户端代码编写,步骤与server类似,新建一个client文件夹,上面第4步为止的所有文件拷贝到client文件夹中,接着建立一个Win32控制台应用程序,名字为client(我前面的client文件夹的路径为D:/add/client那么这个时候创建的工程路径为D:/add/,名字为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_set_namespaces(&add_soap, add_namespaces);
	//该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__add前面加上

	//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;
}

10、添加其他文件有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文件);

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

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

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

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

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







时间: 2024-08-07 08:37:13

20160421 VC++6.0环境下gSOAP的使用的相关文章

ACE的构建(VC++6.0环境)

ACE的构建(VC++6.0环境)Windows下ACE的构建1. 将ACE-5.5.zip解压到所需的安装目录,此处以E:/为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers/ace目录中.ACE_ROOT=E:/ACE_wrappers.2. 在系统中新建ACE_ROOT环境变量,值设为 E:/ACE_wrappers.具体设置为:我的电脑->属性->高级->环境变量->新建3. 在E:/ACE_wrappers/ace目录中创建一个头

PC-Lint的安装详细配置过程(以VC++6.0环境为例)

本文主要介绍了PC-Lint安装后针对VC++6.0开发环境进行配置的详细过程,总共分为三部分,下面依次对这三部分进行说明. 一.   首先下载PC-Lint,然后开始安装,一路"下一步"直到安装完成.此时会弹出一个对话框,询问你是否进行配置,点击确定,然后进入第二步的配置过程.注意,笔者这里默认将安装路径放在C盘下.读者修改安装路径后需注意这个路径和后续的配置有很大的关系. 二.   接下来就是配置PC-Lint的过程,如图1至图20所示. 图1   PC-Lint配置过程 图2  

Windows-Server-2008、IIS7.0环境下配置伪静态化

在Windows-Server-2008.IIS7.0环境下配置伪静态化 首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为7.0,我们知道,IIS7.0与IIS6.0 的操作界面差别较大,如图(1)所示: 1.IIS7.0操作界面: 图(1) 2 新建网站同时新建应用程序池与网站对应,注意,在IIS7下新建网站之后,程序会自动新建应用程序池与之对应: 不需要再新建应用程序池.如图(2): 图(2) 3  添加网站详细页面如图(3)所示: 图(3)

在vmware workstation10.0环境下给windows server2012R2成功安装hyper-v

有时我们在vmware workstation10.0环境中给windows server 2012R2安装Hyper-v的时候会提示"无法安装Hyper-v:虚拟机监控程序已在运行中"如图,我们可以通过设置让其顺利安装.(温馨提示,在windows8或者8.1中如果你添加了Hyper-v功能后不可用也可以通过此方法来解决) 第一步,打开虚拟机设置选择处理器勾选中"虚拟化Intel VT-x/EPT 或AMD-V/RVT(V)" 第二步:打开虚拟机文件选中后缀名为&

如何在IIS7.0环境下配置ShopNum1分销系统静态化

近来遇到有许多用户已经更换了最新的操作系统,那么,在新的操作系统.新的环境下,究竟 应该如何配置ShopNum1分销系统呢?下面,我们来为大家详细介绍一下如何在Windows Server 2008.IIS7.0环境下配置ShopNum1分销系统:        首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为7.0,我们知道,IIS7.0与IIS6.0   的操作界面差别较大,如图所示:     1.IIS7.0操作界面:     2 新建网站同

[VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”

在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqlite这个数据访问provider是针对.NET2.0环境开发(最新的版本是1.0.66.0,20

如何在IIS7.0环境下配置ShopNum1分销系统静态化?

近来我遇到有许多用户已经更换了最新的操作系统,那么,在新的操作系统.新的环境下,究竟 应该如何配置ShopNum1分销系统呢?下面,我们来为大家详细介绍一下如何在Windows Server 2008.IIS7.0环境下配置ShopNum1分销系统:      首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为7.0,我们知道,IIS7.0与IIS6.0 的操作界面差别较大,如图所示:  1.IIS7.0操作界面:                  

cuda8.0环境下安装py-faster-rcnn问题总结

首先声明,由于之前安装的cuda8.0,在实践中出现各种问题,这里不是指安装环境问题,而是在训练模型是会阻止内核启动,因此让我不得不转战8.0,说出来都是泪啊,配个环境都配了一个礼拜了,所以,请不要轻易重装一个ubuntu系统,尤其当你安装了各种环境后,因为,你根本不知道后面会遇到什么可怕的事情.... 在安装py-faster-rcnn是,当然前提是到了运行demo.py的时候了,前面工作都做好了,与到了以下问题: 1.libcudart.so.8.0: cannot open shared

Hadoop2.2.0环境下Sqoop1.99.3安装

本文转载自http://blog.csdn.net/liuwenbo0920/article/details/40504045 1.安装准备工作: 已经装好的hadoop环境是hadoop 2.2.0下载的sqoop安装包(注意是hadoop200) 下载sqoop  wget  http://mirrors.cnnic.cn/apache/sqoop/1.99.6/sqoop-1.99.3-bin-hadoop200.tar.gz 2.解压文件到工作目录: 将sqoop解压到目标目录,我的是