gSOAP calc服务端与客户端示例
1. Web服务定义描述头文件
typedef double xsd__double;
int ns__add(xsd__double a, xsd__double b, xsd__double &result);
int ns__sub(xsd__double a, xsd__double b, xsd__double &result);
int ns__sqrt(xsd__double a, xsd__double &result);
2. 生成服务端与客户端代码
soapcpp2 calc.h
3. 服务端工程 / 客户端工程对比
4. 服务端main.cpp
#include "soapH.h"
#include <math.h> int http_get(struct soap *soap)
{
FILE *fd = NULL;
fd = fopen("ns.wsdl", "rb");
if (!fd)
{
return ;
}
soap->http_content = "text/xml";
soap_response(soap, SOAP_FILE); while(true)
{
size_t r = fread(soap->tmpbuf, , sizeof(soap->tmpbuf), fd); if (!r) break;
if (soap_send_raw(soap, soap->tmpbuf, r)) break;
}
fclose(fd);
soap_end_send(soap); return SOAP_OK;
} int http_get1(struct soap *soap)
{
std::string fileName="ns.wsdl"; FILE *fd = NULL;
fd = fopen(fileName.c_str(), "rb");//openWSDLfiletocopy
if(!fd)
{
return ; //return HTTP not found error
}
soap->http_content="text/xml"; //HTTP header with text/xml content
soap_response(soap,SOAP_FILE);
while (true)
{
size_t r=fread(soap->tmpbuf,,sizeof(soap->tmpbuf),fd);
if(!r) break;
if(soap_send_raw(soap,soap->tmpbuf,r)) break; //cannot send, but little we can do about that
}
fclose(fd);
soap_end_send(soap);
return SOAP_OK;
} int main()
{
struct soap soap;
int m, s;
soap_init(&soap);
soap.fget = http_get; m = soap_bind(&soap, NULL, , ); if (m < )
{
soap_print_fault(&soap, stderr);
exit(-);
} fprintf(stderr, "Socket connection successful: master socket = %d\n", m); for (int i=; ; i++)
{
s = soap_accept(&soap); //接受请求
if (s < )
{
soap_print_fault(&soap, stderr);
break;
} fprintf(stderr, "%d: accepted connection from IP=%d.%d.%d.%d socket=%d",
i, (soap.ip >> )&0xFF, (soap.ip >> )&0xFF, (soap.ip >> )&0xFF, soap.ip&&0xFF, s); //打印出接受请求的详细信息 if (soap_serve(&soap) != SOAP_OK) //处理请求
soap_print_fault(&soap, stderr);
fprintf(stderr, "request served\n"); soap_destroy(&soap); //清理soap类实例
soap_end(&soap); //清理soap相关的所有资源并关闭连接
}
soap_done(&soap); return soap_serve(soap_new());
} int ns__add(struct soap *soap, double a, double b, double &result)
{
result = a + b;
return SOAP_OK;
} int ns__sub(struct soap *soap, double a, double b, double &result)
{
result = a - b;
return SOAP_OK;
} int ns__sqrt(struct soap *soap, double a, double &result)
{ if (a >= )
{
result = sqrt(a);
return SOAP_OK;
}
else
return soap_receiver_fault(soap, "Square root of negative number", "I can't only take the square root of a non-negative number");
} SOAP_NMAC struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"ns", "http://tempuri.org/ns.xsd", NULL, NULL},
{NULL, NULL, NULL, NULL}
};
5. 客户端main.cpp
#include "soapH.h" int main()
{
struct soap calc_soap; soap_init(&calc_soap); double result = -; /*
soap_call_ns__add(
struct soap *soap,
const char *soap_endpoint,
const char *soap_action,
double a,
double b,
double &result) */
//调用成功返回标准0
int flag = soap_call_ns__add(&calc_soap, "http://localhost:9001", "", 1.0, 6.9, result); std::cout<<"result="<<result<<", flag="<<flag<<std::endl; flag = soap_call_ns__sqrt(&calc_soap, "http://localhost:9001", "", , result);
std::cout<<"result="<<result<<", flag="<<flag<<std::endl; return ;
}; SOAP_NMAC struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"ns", "http://tempuri.org/ns.xsd", NULL, NULL},
{NULL, NULL, NULL, NULL}
};
6 服务端与客户端调试
gSOAP calc服务端与客户端示例的更多相关文章
- 【GoLang】golang HTTP GET/POST JSON的服务端、客户端示例,包含序列化、反序列化
服务端代码示例: package main import ( "encoding/json" "fmt" "io/ioutil" " ...
- Hessian服务端和客户端示例
一.服务端 1.创建web项目,建立客户端调用的hessian接口和实现类. 接口: package com.ymx.hessian.service; import com.ymx.hessian.s ...
- 简单的UDP服务端和客户端示例
UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助! 当然,实际上,在这块我也刚入门! 首先写服务端代码,服务端邦定本地的IP和端口来监 ...
- 基于Select模型的Windows TCP服务端和客户端程序示例
最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...
- 使用flask_socketio实现服务端向客户端定时推送
websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...
- C# 编写WCF简单的服务端与客户端
http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Win ...
- QUdpSocket-Qt使用Udp通讯实现服务端和客户端
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QUdpSocket-Qt使用Udp通讯实现服务端和客户端 本文地址:https:// ...
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
常量,字段,构造方法 常量 1.什么是常量 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...
随机推荐
- 互联网安全的必要性:CSDN用户信息泄露案告破
本报讯 昨天,记者从北京警方获悉,历时40多天的侦查,轰动互联网的“CSDN网站用户信息泄露案”告破,涉案嫌疑人已被刑拘.由于保密措施不力,北京警方还向CSDN网站开出我国落实信息安全等级保护制度以来 ...
- day38 19-Spring整合web开发
整合Spring开发环境只需要引入spring-web-3.2.0.RELEASE.jar这个jar包就可以了,因为它已经帮我们做好了. Spring整合web开发,不用每次都加载Spring环境了. ...
- ubuntu上制作应用程序的快捷图标启动
最近在研究Go语言,对比了几种流行的IDE,发现GoLand是使用体验最好的,没有之一.这也印证了网友们常说的那句话“JetBrain出品,必属精品”. 在ubuntu环境下使用GoLand,直接到J ...
- Liferay 7 OSGi第三方jar包依赖问题
发现遇到这个问题的人挺多的,现在跟新一下好好写. 在开发Liferay的时候,我们常常会遇到Unresolved requirement: Import-Package: {package name} ...
- Tool-图片压缩-腾讯智图:腾讯智图
ylbtech-Tool-图片压缩-腾讯智图:腾讯智图 智图是腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台,其功能包括针对png,jpeg,gif等各类格式图片的压缩,以及为上传 ...
- Python中的进程池与线程池
引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 ...
- prepareStatement设置参数,mysql数据出现中文‘?’的情景与解决方式
在prepareStatement中传入中文的参数,mysql数据库中出现“?”号 try { Class.forName("com.mysql.jdbc.Driver"); co ...
- C#中App.config文件配置获取
最新的framework使用如下方法: using System.Configuration; ConfigurationManager.AppSettings["key"]; A ...
- JAVA代码规范 标签: java文档工作 2016-06-12 21:50 277人阅读 评论(5) 收藏
开始做java的ITOO了,近期的工作内容就是按照代码规范来改自己负责的代码,之前做机房收费系统的时候,也是经常验收的,甚至于我们上次验收的时候,老师也去了.对于我们的代码规范,老师其实是很重视的,他 ...
- XCode4 App Store提交小结
本文建立在你的应用程序已开发完成的基础上 本文以理清流程为主 本文的内容以Distribution为准,但是所附的参考资料也有对Ad Hoc的说明 三种证书(Development.Distribut ...