gsoap简单实例

linux下gsoap的初次使用     这两天,接到一个项目,需要在linux程序中调用远程的web应用,通过soap协议。开始上网查了下资料,发现了gsoap库这个好东东^_^。继续在网上搜索例子代码,发现基本都不可编译通过,于是便一边学习一边写了这个最简单的例子,希望对后来者起到一点帮助。对gsoap的简单介绍,请自己参阅http://gsoap2.sourceforge.net/    下载相应的包,主要有2个工具和源代码 阅读详情

 
前一阶段写gSOAP 的文章没保存好,后来想写的,越学越没有写的勇气了,感觉自己很菜,但是现在感觉还是写点就算给入门者一点提示吧。另外虽说这篇文章是自己写的,但是却感觉是东拼西凑的,有很多别人的东西了。
看了我转载的关于soap 的文章,大家想必对soap有所了解了吧,那么gSOAP是什么那?
gSOAP 是一个开源的项目,用它可以方便的使用c/c++地进行SOAP客户端和服务器端编程,而不必了解xml和SOAP协议的细节。这样使用者就可以专注于自 己的web service 客户端或服务器端的编写,而不用纠缠与其它细节。我第一次接触这些东西,我对SOAP的理解是这样的:以http协议为基本的通信协议,以xml文件形式 请求远程服务,再以xml文件的形式返回执行结果,我理解的就这么简单了,有啥不妥处,还请指教阿。
实践一下才有理性认识,下面是我自己在windows下,具体说来就是用vc 6.0下编写的一个很简单的客户端程序调用远程的服务,来发送电子邮件,感觉很爽吧。
首先我们到
  http://sourceforge.net/project/showfiles.php?group_id=52781  下载gSOAP下载工具集吧,不同的系统下用的gSOAP是不一样的,根据需要下载了windows下的和linux下的。
gSOAP工具集不需要安装,直接解压就可以了。在/bin目录下我们可以看到两个可执行文件:
soapcpp2.exe: gSOAP编译器,编译头文件生成服务器和客户端都需要的 c/c++文件。 
wsdl2h.exe: 编译wsdl文件生成c/c++头文件。
工具就算准备好了。
其次,我们到
  http://www.abysal.com/soap/AbysalEmail.wsdl  下载
wsdl文件,假设保存文件名为:AbysalEmail.wsdl。所谓的wsdl文件翻译成中
文就是网络服务描述文件了。我们用wsdl2h.exe工具来根据wsdl文件生成
c/c++头文件,可以用-c选项是生成纯c的头文件,另外用-s选项是说明我们在
程序中不使用stl,注意了默认我们是适用stl的。
用如下命令:
wsdl2h   --t ../typemap.dat -o AbysalEmail.h AbysalEmail.wsdl
既可以生成我们需要的AbysalEmail.h头文件了。这里文件名可以随便起了。
将下载的gsoap的import里的stlvector.h中文件拷贝到当前的文件夹下,因为默认是使用stl的,所以需要它。
然后执行soapcpp2 命令来生成存根程序,用如下命令:
soapcpp2   -C AbysalEmail.h
-C   选项是只生成客户端的,默认是生成客户端和服务器端的,如果你在程序中使用了vector还要加上 –limport选项。
即可以生存客户端存根程序和框架了。
soapClient.cpp:编译客户端的需要的存根例程。
soapC.cpp,soapH.h:用来序列化和反序列化c/c++不同数据类型。
soapServer.cpp: 编译服务器端的需要的存根例程。
soapXXXProxy.h: 生成的代理类的头文件,使用代理类时需要此文件。
本程序为soapSendEmailBindingProxy.h。

第三步,就是在vc中建个工程,设置如下:
在vc6中建立工程,其源文件为:sendMailClient.cpp soapC.cpp 
                                 soapClient.cpp stdsoap2.cpp
头文件为:    AbysalEmail.h soapH.h soapStub.h stdsoap2.h    
其他依赖文件为:basetsd.h   sendemailbinding.nsmp
stdsoap2.cpp stdsoap2.h是下载的gSOAP中包含的。
另外在所需要的库中把wsock32.lib加上,gSOAP也是采用socket方式连接的。
其中sendMailClient.cpp为我写的客户端程序,程序如下:

#include "soapH.h"                          // 得到存根程序
#include "SendEmailBinding.nsmap"          //得到名称空间映射表
#include <iostream>
#include   <string>
#include "soapSendEmailBindingProxy.h"

using namespace std;

int main(int argc, char **argv) 
{
struct soap email_soap;
int result = -1;
SendEmailBinding   EmailBind;              //生成代理类对象
_ns1__SendEmail   sendEmail;              //web服务发送电子邮件对象
_ns1__SendEmailResponse   Email_Response;   //web 服务返回发送结果对象
string from = "mseaspring";
string to = "David";
string sub = "Hello test!";
sendEmail.From = &from;
sendEmail.FromAddress = "
  mseaspring@hotmail.com  ";
sendEmail.MsgBody = "I want to test a web service!";
sendEmail.To = &to;
sendEmail.ToAddress = "
  mseaspring@gmail.com  ";
sendEmail.Subject = ⊂

result = EmailBind.__ns1__SendEmail(&sendEmail,   &Email_Response);
if (result != 0)
{
printf("soap error ,errcode = %d/n", result);
}
else
{
       cout<<"The result is :"<<Email_Response.ReturnCode<<endl;
cout<<"恭喜你,邮件发送成功!"<<endl;
}
return 0;
}我程序中是采用代理类的方式编写的程序,不用代理类的代码如下:
#include "soapH.h"                          //   得到存根程序
#include "SendEmailBinding.nsmap"          // 得到名称空间映射表
#include <iostream>
#include   <string>
using namespace std;

int main(int argc, char **argv) 
{
struct soap email_soap;
//初始化gSoap运行时环境变量,只需初始化一次
soap_init(&email_soap);
int result = -1;
//远程web服务的endpoint URL
const char* server="http://www.abysal.com/soap/soapmail.wdtp";
string from = "mseaspring";
string to = "David";
string sub = "Hello test!";
sendEmail.From = &from;
sendEmail.FromAddress = "
  mseaspring@hotmail.com  ";
sendEmail.MsgBody = "I want to test a web service!";
sendEmail.To = &to;
sendEmail.ToAddress = "
  mseaspring@gmail.com  ";
sendEmail.Subject = ⊂
//调用根据远程服务产生函数的接口
result = soap_call___ns1__SendEmail(&email_soap, server, "", &sendEmail,   &Email_Response);
if(email_soap.error)
{
//在stderr流中打印soap的错误信息
soap_print_fault(&email_soap,stderr);
result = email_soap.error;
}
soap_destroy(&email_soap);// 删除反序列化类的实例,仅用于c++
soap_end(&email_soap); // 清空已经并行化的数据
soap_done(&email_soap); // 与gSOAP 环境相分离,关闭连接
if (result != 0)
{
printf("soap error ,errcode = %d/n", result);
}
else
{
       cout<<"The result is :"<<Email_Response.ReturnCode<<endl;
cout<<"恭喜你,邮件发送成功!"<<endl;
}
return 0;
}
你可能会问我怎么知道远程服务的接口阿? 到soapStub.h中去找就可以了,至于代理类的使用,到代理类头文件中一看便知。
好了,终于要写完了,当然我们不仅可以编写客户端也可以编写服务器端程序,至于服务器端,有兴趣的可以自己看看gSOAP里面的文档,也很简单的,不过也要花点时间学习的了,呵呵。
如果对于上面程序,有谁没调试成功联系我,邮箱都写在程序里那。呵呵。

gsoap源代码 带实例带教程带使用说明 带gsoap-2.8源码,基于服务器客户端的实例,带自动生成服务客户端代码的批处理程序,及如何使用。带自己学习参考的教程; 0.解压附件,soapInterface.bat所在路径不得含中文 空格 1.新建头文件 取soapInterface.bat文件的同名:soapInterface.h 文件内编写接口,具体说明看附件参考的教程 //gsoap ns service name: gservice //gsoap ns service style: rpc 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); 2.从附件内gsoap-2.8包中搜索复制stdsoap2.h,stdsoap2.cpp,soapcpp2.exe, 存放于soapInterface.bat同级目录 3.双击soapInterface.bat运行。生成gClientSoap,gServerSoap两个文件夹,分别复制到服务器工程与客户端工程中使用 4.gClientSoap,gServerSoap两个文件夹内用到的文件功能说明,更多参考附件教程 1)soapC.cpp , soapH.h//soap的序列和反序列代码,它已经包含了soapStub.h 2)soapServer.c ppsoapServerLib.cpp //服务器端代码(纯C代码是soapServer.c soapServerLib.c ),soapServerLib.cpp文件则只是简单地包含soapServer.cpp和soapC.cpp 3)soapClient.cpp soapClientLib.cpp//客户端代码(纯C代码是soapClient.csoapClientLib.c ),soapClientLib.cpp文件则只是简单地包含soapClient.cpp和soapC.cpp 4) soapStub.h // soap的存根文件,定义了我们编写的头文件里对应的远程调用模型 5) add.nsmap //XML服务命名空间 6)服务器端要载入的文件有:soapServer.cpp,soapC.cpp,stdsoap2.cpp; 要包含的文件有:gservice.nsmap,soapH.h; 客户端要输入的文件有: soapClient.cpp,soapC.cpp,stdsoap2.cpp; 要包含的文件有:gservice.nsmap,soapH.h 立即下载

相关推荐

gsoapdemo实例

gsoapdemo C++ gsoap服务器及客户端代码实现,可直接编译测试研究

vc++2008 采用GSoap访问 WebService

(转http://www.cppblog.com/yeqing/articles/12762.html) 前一阶段写gSOAP 的文章没保存好,后来想写的,越学越没有写的勇气了,感觉自己很菜,但是现在感觉还是写点就算给入门者一点提示吧。另外虽说这篇文章是自己写的,但是却感觉是东拼西凑的,有很多别人的东西了。 看了我转载的关于soap 的文章,大家想必对soap有所了解了吧,...

weixin_30847939的博客 190

VC++使用gsoap调用WebService接口

VC++使用gsoap调用webservice文件,包含使用说明和事例程序。

gSoap使用实例【转】

(基于gsoap-win32-2.7版本,编译环境为VS2005) 客户端 访问自己定义的一个WebService(命名为AddService,对输入的两个整形参数求和,具体服务定义参见 AddService.wsdl) 转换WSDL wsdl2h.exe -s -o AddService.h AddService.wsdl 生成具体调用代码 在命令行输入soapcpp2.exe

lp2007的专栏 1927

【土壤普查实战】Python+ArcGIS随机森林模型一键生成土壤类型栅格图

本文详细介绍了如何利用Python和ArcGIS结合随机森林模型实现土壤类型栅格图的自动化生成,大幅提升土壤普查效率。通过环境准备、数据预处理、模型构建与调优等关键步骤,帮助用户掌握从样本点生成到最终栅格图输出的完整流程,适用于大面积区域或样本点较多的土壤分类任务。

weixin_29229989的博客 217

深入GD32/STM32引脚复用:你的JTAG/SWD接口是怎么‘消失’的?一次讲清原理与预防

本文深入解析GD32/STM32调试接口(JTAG/SWD)突然失效的原理与预防措施。通过分析MCU启动流程、引脚复用机制及典型错误代码模式,揭示调试接口'消失'的根本原因,并提供硬件设计检查清单、软件防护代码及开发流程优化方案,帮助开发者有效避免烧录失败问题。

weixin_42532938的博客 368

gSOAP简单使用例子

一.系统环境 linux操作系统kernel2.4.2,安装gsoap2.6到目录/usr/local/gsoap 二.gSOAP的简要使用例子 下面是一个简单的例子,实现一个加法运算的WebService,具体功能是cli端输入num1和num2,server端返回一个n

LBY8203XJ的专栏 3470

拆解人形机器人:核心硬件与驱动系统

本文深入解析人形机器人的核心硬件系统,将其类比为"骨骼+肌肉+神经"的集成体。重点介绍了三大关键组件:驱动单元(无框力矩电机和空心杯电机)、传动单元(谐波减速器和行星滚柱丝杠)以及感知单元(力矩传感器、编码器和IMU)。文章指出一体化关节模组正成为行业趋势,能够实现更紧凑的结构和更高的可靠性。同时分析了硬件价值量分布,强调丝杠、电机等部件是当前技术高地和成本重心。最后指出随着技术进步,机器人价值将更多向"大脑"和"神经"转移。

小明的博客 1529

gsoap使用示例

前一阶段写gSOAP 的文章没保存好,后来想写的,越学越没有写的勇气了,感觉自己很菜,但是现在感觉还是写点就算给入门者一点提示吧。另外虽说这篇文章是自己写的,但是却感觉是东拼西凑的,有很多别人的东西了。 看了我转载的关于soap 的文章,大家想必对soap有所了解了吧,那么gSOAP是什么那? gSOAP 是一个开源的项目,用它可以方便的使用c/c++地进行SOAP客户端和服务器端编程,而不必

固本培元的专栏 1334

AI编码规则:从提示工程到自动化,提升大模型生成代码质量

在软件工程领域,代码质量是保障软件可维护性、安全性和团队协作效率的核心。其背后遵循着从基础语法规范到架构设计原则的一系列工程实践。随着大语言模型(LLM)在代码生成任务中的广泛应用,如何确保AI生成的代码符合这些工程标准,成为一个关键的技术挑战。这涉及到将人类工程师积累的最佳实践,转化为机器可理解、可执行的明确约束。通过系统化的**编码规则**定义与集成,例如构建涵盖安全、风格、架构的多层次规则集,并将其融入**提示工程**或自动化工作流,可以显著引导AI产出更健壮、规范的代码。这种方法的价值在于,它能将模

weixin_42525189的博客 641

高空抛物监控系统:基于YOLOv8的轨迹追踪与可视化系统

本文详细介绍了一种基于YOLOv8深度学习模型的高空抛物监控系统,该系统能够实时检测并追踪高层建筑抛掷物的运动轨迹。文章包含完整的系统设计思路、算法实现细节、数据集构建方法以及基于PyQt5的可视化界面开发过程。我们提供了完整的Python实现代码,并讨论了系统的性能优化策略和实际部署考量。此外,我们还推荐了几个公开可用的高空抛物数据集,并详细分析了系统的应用前景和技术挑战。

YOLO 446

在windows下用gSoap实现简单加法实例

这是看网上的教程实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数 然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来 1.在gSoap的官网上下载文件夹,本人的版本是gsoap-win32-2.7.6c 下载地址:http://sourceforge.net/projects/gsoap2 官方网站:http://genivia.com/Pr

贰圣 1万+

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

用 gSOAP 实现 Web Service 的简单例子

gSOAP的简单使用例子 系统环境:Centos 6.3 操作系统;gsoap-2.8 例子功能:实现一个加法运算的 Web Service,当 client 端输入 num1 和 num2 两个数值后,server端返回 num1 和 num2 相加的结果 sum。 1.定义一个函数声明文件,用来定义接口函数,名称为 add.h,内容如下: //gsoapopt cw //

iw1210的专栏 1689

国科大作业考试资料《人工智能原理与算法》2024新编-第二次作业整理

1、对于下列活动,分别给出任务环境的PEAS描述, 并按2.3.2节列出的性质进行分析: 3、为图2.2中描述的吸尘器世界实现一个可以进行性能度量的环境模拟器。你的实现是必须是模块化的,以使传感器、执行器和环境特征(大小、形状、灰尘放置等)便于修改。 4、实现上述题目真空吸尘器环境中的简单反射Agent。用所有可能的初始灰尘分布和Agent位置,运行环境模拟器和Agent。记录Agent在每种情况下的性能评分和总体平均评分。

MatsumotoChrikk 1187

智能手环嵌入式系统:STM32+ESP8266多传感器健康监护设计

可穿戴健康监测设备是物联网与边缘计算融合的典型应用,其核心在于多源生理信号采集、低功耗实时处理及安全云协同。基于光电容积脉搏波(PPG)的心率与血氧检测、NTC热敏电阻体温测量、加速度-角速度融合跌倒判据等技术,构成了老年健康监护的基础感知能力;而STM32主控与ESP8266协处理器分工架构,则实现了计算资源与通信负载的高效解耦。该方案依托FreeRTOS多任务调度、阿里云IoT物模型标准化交互及MQTT双向通信,兼顾实时性、可靠性和工程可维护性,广泛适用于居家养老、慢病管理与远程健康预警等场景。

weixin_33256096的博客 98

gsoap编译与简单使用

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 才能安装成功

1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

gsoap 简单使用

from:http://blog.youkuaiyun.com/jinpw/article/details/3346844 对gsoap的简单介绍,请自己参阅http://gsoap2.sourceforge.net/     下载相应的包,主要有2个工具和源代码:     wsdl2h -o outfile.h infile.wsdl 实现wsdl文件到h文件的数据映射      

occupy8的专栏 901

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GSOAP工具的简单使用

介绍与概念不再赘述,只贴使用过程。 头文件是要自己按照需要自行定义的,我这里命名为gSoapFun.h 在终端可以查看soapcpp2的参数 以生成c文件为例 输入命令:./soapcpp2 -c gSoapFun.h 生成后的文件不要改动,框架代码已生成。

pg的博客 649

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[gSoap]使用RESTful架构搭建简单跨平台Webservice

简介  原先是直接使用的Socket来进行网络编程,但遇到高并发我就难以招架了,与是在网上找了一下,发现了开源的gSoap跨平台库,于是就开始尝试使用起来。   官方主页:https://www.genivia.com/products.html   说明文档:https://www.genivia.com/doc/soapdoc2.html   源码下载:https://sourceforg

星空不语 3933

Linux 平台gsoap简单使用

gsoap下载地址:https://sourceforge.net/projects/gsoap2/?source=typ_redirect 1、编译生成soapcpp2 下载解压之后 跳转gsoap-2.8 目录,执行 ./configure cd gsoap/  执行 make 会在src目录下生成soapcpp2 2、创建test目录 新建a

a_tu_的专栏 574
上一篇: va_list、va_start、va_arg、va_end的原理与使用
下一篇: gsoap 的教程和使用
beyondchx
博客等级 码龄19年 238粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值