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. Sql基本知识回顾

    一. SQL 基本语句 SQL 分类: DDL —数据定义语言 (Create , Alter , Drop , DECLARE) DML —数据操纵语言 (Select , Delete , Upd ...

  2. LintCode刷题笔记-- BackpackII

    标记: 动态规划 问题描述: Given n items with size Ai, an integer m denotes the size of a backpack. How full you ...

  3. arcgis地图窗口操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. ThinkPHP5.0中的build.php自动生成所需的目录结构的详细方法

    一.来到根目录下,找到bulid.php文件进行改写. 改写方法:保留常用的目录结构,其余按照需求改吧! 二.复制一份build.php文件到application目录下 此时根目录下的bulid.p ...

  5. htmlhomework2

    <!DOCTYPE html> register register username: password: birth: gender: male female

  6. codevs1506 传话

    题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人. 如果a认识b,b不一定认识a. 所有人从1到n编号,给出所有“ ...

  7. 简单线性回归(最小二乘法)python实现

      简单线性回归(最小二乘法)¶   0.引入依赖¶ In [7]: import numpy as np import matplotlib.pyplot as plt   1.导入数据¶ In [ ...

  8. c++第四次作业:继承

    继承与派生 基本概念和语法 概念 继承与派生是同一过程从不同角度看 保持已有的特性而构造新类的过程称为继承. 在已有类的基础上新增自己的特性而产生新类的过程为派生. 被继承的已有类称为基类(父类) 派 ...

  9. MongoDB -- JAVA基本API操作

    package com.example.mongodb.mongodb.demo; import com.mongodb.MongoClient; import com.mongodb.client. ...

  10. SDUT-2119_数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 分别输入两个有序的整数序列(分别包 ...