gSoap官网。遇到问题时,官网往往是最能提供帮助的地方。
下载
官方文档
值得参考的链接。
- gSoap使用心得: http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html
- gSoap接口定义: http://blog.sina.com.cn/s/blog_5ee9235c0100de3g.html
Qt:使用gSoap做一个简单的CS系统_Jason’s home-CSDN博客
环境: Qt 5.14,win10, msvc2017 compiler
工作原因没使用mingw,以后再确认,估计没啥事。
gSOAP是一个跨平台的,用于开发Web Service服务端和客户端的工具,在Windows、Linux、MAC OS和UNIX下使用C和C++语言编码,集合了SSL功能。
使用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命名空间)函数:
比如:gSoapFoundation 文件夹;
内容如下:
// hello.h
int ns__hello(std::string name, std::string& greeting);
复制 soapcpp2.exe 到gSoapFoundation,和hello.h一起,亦可以通过设置path的方式代替
程序路径:C:\gsoap-2.8\gsoap\bin\win64\soapcpp2.exe , 该处使用win64平台的程序
现在只需使用gSOAP soapcpp2 CLI 从 hello.h服务接口头文件中生成API源代码:
soapcpp2 hello.h
stdsoap2.h
stdsoap2.cpp
从 C:\gsoap-2.8\gsoap\ 路径拷贝至gSoapFoundation中
新建server项目,将 gSoapFoundation 文件夹 拷贝至工作目录。
#include "soapH.h" // include the generated source code headers
#include "ns.nsmap" // include XML namespaces
#include
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;
}
服务端需要导入的文件如下所示:
编译运行,应该无误,可以通过网络浏览器打开页面,大体如下所示:
#include "soapH.h" // include the generated source code headers
#include "ns.nsmap" // include XML namespaces
#include
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;
}
编译运行,确保服务器已运行,调用服务器服务,获取数据,打印输出:
一个非常简单的例子,作为入门的实例。