1. Web服务定义描述头文件

  1. typedef double xsd__double;
  2. int ns__add(xsd__double a, xsd__double b, xsd__double &result);
  3. int ns__sub(xsd__double a, xsd__double b, xsd__double &result);
  4. int ns__sqrt(xsd__double a, xsd__double &result);

2. 生成服务端与客户端代码

soapcpp2 calc.h

3. 服务端工程 / 客户端工程对比

4. 服务端main.cpp

  1. #include "soapH.h"
  2. #include <math.h>
  3.  
  4. int http_get(struct soap *soap)
  5. {
  6. FILE *fd = NULL;
  7. fd = fopen("ns.wsdl", "rb");
  8. if (!fd)
  9. {
  10. return ;
  11. }
  12. soap->http_content = "text/xml";
  13. soap_response(soap, SOAP_FILE);
  14.  
  15. while(true)
  16. {
  17. size_t r = fread(soap->tmpbuf, , sizeof(soap->tmpbuf), fd);
  18.  
  19. if (!r) break;
  20. if (soap_send_raw(soap, soap->tmpbuf, r)) break;
  21. }
  22. fclose(fd);
  23. soap_end_send(soap);
  24.  
  25. return SOAP_OK;
  26. }
  27.  
  28. int http_get1(struct soap *soap)
  29. {
  30. std::string fileName="ns.wsdl";
  31.  
  32. FILE *fd = NULL;
  33. fd = fopen(fileName.c_str(), "rb");//openWSDLfiletocopy
  34. if(!fd)
  35. {
  36. return ; //return HTTP not found error
  37. }
  38. soap->http_content="text/xml"; //HTTP header with text/xml content
  39. soap_response(soap,SOAP_FILE);
  40. while (true)
  41. {
  42. size_t r=fread(soap->tmpbuf,,sizeof(soap->tmpbuf),fd);
  43. if(!r) break;
  44. if(soap_send_raw(soap,soap->tmpbuf,r)) break; //cannot send, but little we can do about that
  45. }
  46. fclose(fd);
  47. soap_end_send(soap);
  48. return SOAP_OK;
  49. }
  50.  
  51. int main()
  52. {
  53. struct soap soap;
  54. int m, s;
  55. soap_init(&soap);
  56. soap.fget = http_get;
  57.  
  58. m = soap_bind(&soap, NULL, , );
  59.  
  60. if (m < )
  61. {
  62. soap_print_fault(&soap, stderr);
  63. exit(-);
  64. }
  65.  
  66. fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
  67.  
  68. for (int i=; ; i++)
  69. {
  70. s = soap_accept(&soap); //接受请求
  71. if (s < )
  72. {
  73. soap_print_fault(&soap, stderr);
  74. break;
  75. }
  76.  
  77. fprintf(stderr, "%d: accepted connection from IP=%d.%d.%d.%d socket=%d",
  78. i, (soap.ip >> )&0xFF, (soap.ip >> )&0xFF, (soap.ip >> )&0xFF, soap.ip&&0xFF, s); //打印出接受请求的详细信息
  79.  
  80. if (soap_serve(&soap) != SOAP_OK) //处理请求
  81. soap_print_fault(&soap, stderr);
  82. fprintf(stderr, "request served\n");
  83.  
  84. soap_destroy(&soap); //清理soap类实例
  85. soap_end(&soap); //清理soap相关的所有资源并关闭连接
  86. }
  87. soap_done(&soap);
  88.  
  89. return soap_serve(soap_new());
  90. }
  91.  
  92. int ns__add(struct soap *soap, double a, double b, double &result)
  93. {
  94. result = a + b;
  95. return SOAP_OK;
  96. }
  97.  
  98. int ns__sub(struct soap *soap, double a, double b, double &result)
  99. {
  100. result = a - b;
  101. return SOAP_OK;
  102. }
  103.  
  104. int ns__sqrt(struct soap *soap, double a, double &result)
  105. {
  106.  
  107. if (a >= )
  108. {
  109. result = sqrt(a);
  110. return SOAP_OK;
  111. }
  112. else
  113. return soap_receiver_fault(soap, "Square root of negative number", "I can't only take the square root of a non-negative number");
  114. }
  115.  
  116. SOAP_NMAC struct Namespace namespaces[] =
  117. {
  118. {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
  119. {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
  120. {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
  121. {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
  122. {"ns", "http://tempuri.org/ns.xsd", NULL, NULL},
  123. {NULL, NULL, NULL, NULL}
  124. };

5. 客户端main.cpp

  1. #include "soapH.h"
  2.  
  3. int main()
  4. {
  5. struct soap calc_soap;
  6.  
  7. soap_init(&calc_soap);
  8.  
  9. double result = -;
  10.  
  11. /*
  12. soap_call_ns__add(
  13. struct soap *soap,
  14. const char *soap_endpoint,
  15. const char *soap_action,
  16. double a,
  17. double b,
  18. double &result)
  19.  
  20. */
  21. //调用成功返回标准0
  22. int flag = soap_call_ns__add(&calc_soap, "http://localhost:9001", "", 1.0, 6.9, result);
  23.  
  24. std::cout<<"result="<<result<<", flag="<<flag<<std::endl;
  25.  
  26. flag = soap_call_ns__sqrt(&calc_soap, "http://localhost:9001", "", , result);
  27. std::cout<<"result="<<result<<", flag="<<flag<<std::endl;
  28.  
  29. return ;
  30. };
  31.  
  32. SOAP_NMAC struct Namespace namespaces[] =
  33. {
  34. {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
  35. {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
  36. {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
  37. {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
  38. {"ns", "http://tempuri.org/ns.xsd", NULL, NULL},
  39. {NULL, NULL, NULL, NULL}
  40. };

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. 精密MRAM芯片制造系统

    MRAM是一种非常复杂的薄膜多层堆叠,由10多种不同材料和超过30层以上的薄膜与堆叠组成,部分薄膜层的厚度仅达数埃,比人类的发丝还要薄500000倍,相近于一颗原子的大小,如何控制这些薄膜层的厚度.沉 ...

  2. LintCode_175 翻转二叉树

    题目 翻转一棵二叉树 您在真实的面试中是否遇到过这个题? Yes 样例 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 和前序遍历代码很相似从叶子节点依次翻转递归到根节点C++代码 ...

  3. js关闭或者刷新页面后执行事件

    onbeforeunload 使用方法 window.onbeforeunload=function(){ return ''; } 有返回值才能弹出显示,或者有需要执行的事件也行.

  4. 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?

    摘要: 分类问题是生活中最常遇到的问题之一.普通人在做出选择之前,可能会犹豫不决,但对机器而言,则是唯一必选的问题.我们可以通过算法生成模型去帮助我们快速的做出选择,而且保证误差最小.充足的样本,合适 ...

  5. 【Leetcode 堆、快速选择、Top-K问题 BFPRT】数组中的第K个最大元素(215)

    这道题很强大,引出了很多知识点 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5 ...

  6. SQLServer数据库(二)

    数据库设计:就是将数据库中的数据库实体及这些数据库实体之间的关系,进行规划和结构化的过程. 项目开发过程: 需求分析 概要设计 详细设计 代码编写 运行测试 打包发行 数据库的系统分析基本步骤:收集信 ...

  7. 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程(一)(2019-08-23)

    目录 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程 安装前准备 安装 ESP8266 工具链 下载 ESP8266 SDK 编译 花絮 使用 Windo ...

  8. Vagrant-安装教程及常见问题

    http://ju.outofmemory.cn/entry/346215 前言: Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 它的主要意义是让所有开发人员都使用和线上服务 ...

  9. Go语言开发教程

    Go语言简述 兴起:2009年Gogle发布的第二款开源编程语言 特征: 语法简单:语法标准比较严格,适合开发人员短时间高效的服务端开发. 并发模型:Goroutine是Go最显著的特征,使用类协程的 ...

  10. Java8 日期、时间操作

    一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...