c++ http服务器客户端程序-传输xml解析xml数据(3)

2024-06-03 02:08

本文主要是介绍c++ http服务器客户端程序-传输xml解析xml数据(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、服务器端的实例:

#include "stdafx.h"

#include <iostream>

#include <chrono>
#include <cstdio>
#include "httplib.h"

using namespace httplib;

using namespace std;

#include "pugixml/pugixml.cpp"

struct xml_string_writer : pugi::xml_writer
{
    std::string result;
    virtual void write(const void* data, size_t size)
    {
        result += std::string(static_cast<const char*>(data), size);
    }
};

string WriteXML()
{
    using namespace pugi;
    pugi::xml_document doc;
    pugi::xml_node root_node = doc.append_child("Root");
    pugi::xml_node students_node = root_node.append_child("students");
    pugi::xml_node student_node = students_node.append_child("student");
    pugi::xml_node name_node = student_node.append_child("name");
    name_node.append_child(pugi::node_pcdata).set_value("2222");
    
    xml_string_writer _str;
    doc.save(_str);
    return _str.result;
}


int main()
{
    string strXML = WriteXML();

    Server svr;
    if (!svr.is_valid())
    {
        printf("server has an error...\n");
        return -1;
    }

    svr.Get("/", [=](const Request& /*req*/, Response& res)
    {
        res.set_redirect("/hi");
    });

    svr.Get("/hi", [&](const Request& /*req*/, Response& res)
    {
        res.set_content(strXML, "text/plain");
    });

    svr.Get("/stop",
        [&](const Request& /*req*/, Response& /*res*/) { svr.stop(); });

    svr.listen("localhost", 1234);

}

 2、客户端实例:
void ReadXML(string strXML)
{
    std::locale::global(std::locale("chs"));

    using namespace pugi;
    pugi::xml_document doc;
    doc.load_string(strXML.c_str());
    pugi::xml_node tools = doc.first_child();
    /*pugi::xml_node tools = doc.child("Root");*/
    for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it)
    {
        const char *strnode = it->name();
        int tt = 66;
    }
}


int main()
{
    httplib::Client cli("localhost", 1234);
    if (auto res = cli.Get("/hi"))
    {
        cout << res->status << endl;
        cout << res->get_header_value("Content-Type") << endl;
        cout << res->body << endl;

        //解析当前的json
        ReadXML(res->body);
    }
    else
    {
        
    }
    system("pause");
}
 

 

至此,一个简单的http服务器端客户端通信传输xml数据实例就完成了
 

这篇关于c++ http服务器客户端程序-传输xml解析xml数据(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025733

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty