Qt使用gSoap实现webservice服务端和客户端

Qt使用gSoap实现webservice服务端和客户端

  1. gSoap官网。遇到问题时,官网往往是最能提供帮助的地方。

  2. 值得参考的链接。

    • gSoap使用心得: http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html
    • gSoap接口定义: http://blog.sina.com.cn/s/blog_5ee9235c0100de3g.html
  3. Qt:使用gSoap做一个简单的CS系统_Jason’s home-CSDN博客

  4. 环境: Qt 5.14,win10, msvc2017 compiler

    工作原因没使用mingw,以后再确认,估计没啥事。

gSoap工具介绍

gSOAP是一个跨平台的,用于开发Web Service服务端和客户端的工具,在Windows、Linux、MAC OS和UNIX下使用C和C++语言编码,集合了SSL功能。

1、下载

  • 下载链接:https://www.genivia.com/products.html,下载开源版本
    在这里插入图片描述

  • 页面跳转,自动下载
    在这里插入图片描述

  • 压缩包

    image-20211009110050584

  • 解压缩到C盘

    比如:C:\gsoap-2.8\

2、Hello world: 开始使用SOAP api

使用gSOAP自动编码CLI工具和库,就可以轻松地使用和部署SOAP/XML Web服务api。

CLI 命令行界面(英语:command-line interface)是在图形用户界面(GUI)得到普及之前使用最为广泛的用户界面(User Interface),用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。

例如,让我们实现一个简单的SOAP hello API,它接受一个名称并返回问候“hello name”。

SOAP API使用XML,但使用gSoup工具在实际开发时根本不需要使用XML,因为我们在c++中使用了gSOAP XML数据绑定,这使我们的代码比DOM或SAX更容易使用。我们的hello API在hello.h头文件中被简单地声明为一个(有**ns__**限定的XML命名空间)函数:

2.1 新建文件夹

比如:gSoapFoundation 文件夹;

2.2 新建服务接口头文件 hello.h

内容如下:

// hello.h
int ns__hello(std::string name, std::string& greeting);

2.3 使用 soapcpp2.exe

复制 soapcpp2.exe 到gSoapFoundation,和hello.h一起,亦可以通过设置path的方式代替

image-20211009113655031

程序路径:C:\gsoap-2.8\gsoap\bin\win64\soapcpp2.exe , 该处使用win64平台的程序

现在只需使用gSOAP soapcpp2 CLI 从 hello.h服务接口头文件中生成API源代码:

soapcpp2 hello.h

在这里插入图片描述

2.4、拷贝源代码库文件:

  • stdsoap2.h

  • stdsoap2.cpp

    从 C:\gsoap-2.8\gsoap\ 路径拷贝至gSoapFoundation中

image-20211009114231022

2.5 Qt 服务器程序

新建server项目,将 gSoapFoundation 文件夹 拷贝至工作目录。

#include "soapH.h"  // include the generated source code headers
#include "ns.nsmap" // include XML namespaces
#include <QDebug>

int main(int argc, char *argv[])
{
    // 定义soap环境
    struct soap recieveSoap;
    // 初始化环境
    soap_init(&recieveSoap);

    // 绑定环境/主机/端口/backlog
    soap_bind(&recieveSoap, "127.0.0.1", 23410, 100);

    while (true) {  // 死循环,类似监听
        // 接受客户端的连接
        int s = soap_accept(&recieveSoap);
        if (s < 0) {
            soap_print_fault(&recieveSoap, stderr);
            qDebug() << "error";
            exit(-1);
        }
        qDebug() << "Socket connection successful: slave socket =" << s;

        soap_serve(&recieveSoap);    // serve request, one thread, CGI style
        soap_end(&recieveSoap);      // dealloc data and clean up
    }

    return 0;
}
//server端的实现函数与 hello.h 中声明的函数相同,但是多了一个当前的soap连接的参数
int ns__hello(struct soap *soap, std::string name, std::string& greeting)
{
    greeting = "Hello " + name ;
    return SOAP_OK;
}

服务端需要导入的文件如下所示:

image-20211009132800712

编译运行,应该无误,可以通过网络浏览器打开页面,大体如下所示:

在这里插入图片描述

2.6 客户端

#include "soapH.h"  // include the generated source code headers
#include "ns.nsmap" // include XML namespaces

#include <QDebug>

int main(int argc, char *argv[])
{
    struct soap *soap = soap_new(); // new context
    std::string greeting;
    //该函数是客户端调用的主要函数,后面几个参数和 hello.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__hello前面加上soap_call_
    if (soap_call_ns__hello(soap, "127.0.0.1:23410", NULL, "world", greeting) == SOAP_OK)
        qDebug() << greeting.data ();
    else
        soap_stream_fault(soap, std::cerr);
    soap_destroy(soap); // delete managed deserialized C++ instances
    soap_end(soap);     // delete other managed data
    soap_free(soap);    // free context
    return 0;
}

image-20211009133340407

编译运行,确保服务器已运行,调用服务器服务,获取数据,打印输出:

image-20211009133437004

3、总结

一个非常简单的例子,作为入门的实例。😄

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用gSOAP生成Onvif服务端,你需要按照以下步骤操作: 1. 下载和安装gSOAP:首先,你需要从gSOAP官方网站(https://www.genivia.com/downloads.html)下载并安装gSOAP工具包。根据你的操作系统选择合适的版本,并按照官方文档进行安装步骤。 2. 定义服务接口:使用gSOAP的接口定义语言(IDL)来定义你的Onvif服务接口。在IDL文件中,你可以定义服务的方法、参数和返回类型等。确保按照Onvif规范来定义你的服务接口。 3. 生成代码:使用gSOAP提供的工具来生成C/C++代码。你需要使用命令行工具 `soapcpp2` 并提供IDL文件作为输入。执行命令后,gSOAP将生成相应的服务端客户端代码文件。 4. 实现服务逻辑:根据生成的代码,你需要实现Onvif服务的具体逻辑。这包括处理接收到的请求、执行相应的操作并构建响应。 5. 编译和构建:编译你的服务端代码,并链接所需的库文件。确保按照gSOAP文档提供的指导进行编译和构建步骤。 6. 运行服务端:运行生成的服务端程序,并确保它能够监听和处理来自客户端的请求。 请注意,这只是一个概述性的步骤,具体的实施可能因个人需求和环境而异。在实际开发中,你还需要了解Onvif协议规范和gSOAP工具的详细用法,并根据实际情况进行适当的配置和定制。 希望这些信息对你有所帮助!如果你有进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值