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服务端与客户端示例的更多相关文章

  1. 【GoLang】golang HTTP GET/POST JSON的服务端、客户端示例,包含序列化、反序列化

    服务端代码示例: package main import ( "encoding/json" "fmt" "io/ioutil" " ...

  2. Hessian服务端和客户端示例

    一.服务端 1.创建web项目,建立客户端调用的hessian接口和实现类. 接口: package com.ymx.hessian.service; import com.ymx.hessian.s ...

  3. 简单的UDP服务端和客户端示例

    UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助! 当然,实际上,在这块我也刚入门! 首先写服务端代码,服务端邦定本地的IP和端口来监 ...

  4. 基于Select模型的Windows TCP服务端和客户端程序示例

    最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...

  5. 使用flask_socketio实现服务端向客户端定时推送

    websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...

  6. C# 编写WCF简单的服务端与客户端

    http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Win ...

  7. QUdpSocket-Qt使用Udp通讯实现服务端和客户端

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QUdpSocket-Qt使用Udp通讯实现服务端和客户端     本文地址:https:// ...

  8. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  9. 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq

    常量,字段,构造方法   常量 1.什么是常量 ​ 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...

随机推荐

  1. ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇

    ASP.NET自定义控件组件开发 第一章 第三篇   第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...

  2. golang时间与日期相关函数

  3. 【JZOJ3297】【SDOI2013】逃考(escape)

    Mission 高考又来了,对于不认真读书的来讲真不是个好消息.为了小杨能在家里认真读书,他的亲戚决定驻扎在他的家里监督他学习,有爷爷奶奶.外公外婆.大舅.大嫂.阿姨-- 小杨实在是忍无可忍了,这种生 ...

  4. No.5 Verilog 建模方式

    5-1 门级建模 VerilogHDL内建基元门: 多输入门:and, nand, or, nor, xor, xnor; 多输出门:buf, not 三态门:bufif0, bufif1, noti ...

  5. C++ 之手写strcpy

    char *strcpy(char* strDest, const char*strSrc){ assert(strDest != NULL&&strSrc != NULL); cha ...

  6. python中字母的大小写转换

    1.   capitalize(): 首字母大写,其余全部小写 2.   upper() :全转换成大写 3.   lower(): 全转换成小写 4.   title() :标题首字大写,如  &q ...

  7. 在Eclipse打开文件目录

    1.在Eclipse中使用外部命令 2.配置外部命令 3.设置使用的命令和参数 4.设置使用notepad++打开文件

  8. kendo grid 使用小结

    需要注意的: 1. id,如果没有指定id则会导致create.update等操作无法正常使用. 头疼事项: 1. 服务端失败返回error数据.如果是编辑状态,还不能友好提示错误.当然可以使用大量代 ...

  9. 三.使用JDBC处理MySql大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  10. 小爬爬7:回顾&&crawlSpider

    1.回顾昨日内容 回顾 - 全站数据爬取(分页) - 手动请求的发送Request(url,callback) - post请求和cookie处理 - start_requests(self) - F ...