上位机图像处理和嵌入式模块部署(树莓派4b实现xmlrpc通信)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面,我们也用纯API实现过上位机和开发板之间的通信。当时使用的方法,就是用windows自带的网络sdk和linux自带的api函数来完成的。这种方法虽然也可以达成目的,不过做起来总是稍显复杂一点。其实,我们还可以使用第三方库来达成这一目的,写起来比较简单。这种方法就是xmlrpc。xmlrpc是一个标准,很多的库可以使用。今天介绍的就是xmlrpc++库,可以在windows平台编译,也可以在linux平台,使用起来很方便。

1、下载地址

        下载地址在这个地方,大家直接选择download下载即可,

https://xmlrpcpp.sourceforge.net/

2、解压文件

        下载好的文件是一个zip的格式。我们通过mobaxterm上传到树莓派4b之后,直接用unzip解压即可。

3、修改xmlrpc的文件

        如果直接编译代码的话,可能会编译不过,因为会提示我们没有memset之类的函数声明。这个时候需要做的,就是在对应的头文件添加#include <cstring>即可。

4、准备server.cpp文件

        这里全部的测试,就都放到树莓派4b上面做了。windows编译、执行也是相同的道理。首先,我们准备一个server.cpp文件,

#include <iostream>
using namespace std;#include "XmlRpcServer.h"
#include "XmlRpc.h"
#include "XmlRpcValue.h"
#include "XmlRpcServerMethod.h"class CountMethod : public XmlRpc::XmlRpcServerMethod
{
public:CountMethod(XmlRpc::XmlRpcServer* s) :XmlRpc::XmlRpcServerMethod("count", s){return;}void execute(XmlRpc::XmlRpcValue& params, XmlRpc::XmlRpcValue & result){std::cout << params[0]["data1"] << std::endl;std::cout << params[0]["data2"] << std::endl;result["result"] = 1;}
};XmlRpc::XmlRpcServer xml_manage_s;int main(int argc, char* argv[])
{XmlRpc::XmlRpcServerMethod* pCountMethod = new CountMethod(&xml_manage_s);XmlRpc::setVerbosity(0);xml_manage_s.bindAndListen(30000);// Enable introspectionxml_manage_s.enableIntrospection(true);xml_manage_s.work(-1.0);delete pCountMethod;return 0;
}

        编译的话也比较简单,

g++ -c *.cpp
g++ -o server *.o

        注意,完成这一步的时候,需要把代码都copy到src目录下面完成。没有问题的话,我们就可以看到server程序生成。

5、准备client.cpp文件

        文件的准备还是和server.cpp一样的。client.cpp的内容如下所示,

#include <iostream>
using namespace std;#include "XmlRpcClient.h"
#include "XmlRpc.h"int main(int argc, char* argv[])
{XmlRpc::XmlRpcValue params;XmlRpc::XmlRpcValue result;params["data1"]=1;params["data2"]=2;XmlRpc::XmlRpcClient* client = new XmlRpc::XmlRpcClient("127.0.0.1", \30000);client->execute("count", params, result);delete client;std::cout << result["result"];return 0;
}

        还是用同样的方法编译client.cpp,

g++ -c *.cpp
g++ -o client *.o

6、测试和验证

        测试和验证也不麻烦。第一步启动server,输入./server &即可。第二步启动client,即输入./client。如果我们可以看到相关的1、2、1打印,那代表整个流程都是ok的,没有什么问题。对于一般的参数配置和参数传递,用xmlrpc肯定似乎没有问题的。不过如果是大的文件传输,最好还是使用ssh或者是ftp,毕竟术业有专攻。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625282.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软提供用于测试框架的SDK

微软发布了 MSTest SDK。 MSTest SDK基于 MSBuild Project SDK 系统构建并基于MSTest 运行程序&#xff0c;旨在为开发人员提供更好的使用 Microsoft 单元测试框架 MSTest 进行测试的体验。 微软表示&#xff0c; 4 月 11 日发布的MSTest SDK通过合理的默认设置和灵活的选项使…

Git回滚操作,工作区和暂存区恢复修改删除的文件

在利用git协作过程中&#xff0c;经常需要进行代码的撤销操作&#xff0c;这个行为可能发生在工作区&#xff0c;暂存区或者仓库区&#xff08;或版本库&#xff09;。 我们先讨论在工作区与暂存区发生的撤销行为&#xff0c;这里会有两个命令提供帮助&#xff0c;git restore…

uni-app学习

目录 一、安装HBuilderX 二、创第一个uni-app 三、项目目录和文件作用 四、全局配置文件&#xff08;pages.json&#xff09; 4.1 globalStyle&#xff08;全局样式&#xff09; 导航栏&#xff1a;背景颜色、标题颜色、标题文本 导航栏&#xff1a;开启下拉刷新、下拉背…

【GDAL-Python】10-在Python中可视化多波段卫星影像

文章目录 1-介绍1.1 主要内容1.2 线性拉伸介绍 2-代码实现2.1 数据介绍2.2 代码实现2.3 效果显示 4-参考资料 1-介绍 1.1 主要内容 &#xff08;1&#xff09;在本教程中&#xff0c;主要介绍如何使用 Python 和 matplotlib 可视化多波段 Landsat 8 卫星影像组成的真彩色影像…

Python也可以合并和拆分PDF,批量高效!

PDF是最方便的文档格式&#xff0c;可以在任何设备原样且无损的打开&#xff0c;但因为PDF不可编辑&#xff0c;所以很难去拆分合并。 知乎上也有人问&#xff0c;如何对PDF进行合并和拆分&#xff1f; 看很多回答推荐了各种PDF编辑器或者网站&#xff0c;确实方法比较多。 …

DRF APIView源码分析

【三】APIView源码分析 【1】Response和JsonResponse的区别 &#xff08;1&#xff09;Django REST framework的Response DRF的Response类是专门为构建RESTful API设计的。 它不仅仅是一个简单的JSON响应&#xff0c;而是包含了一系列与RESTful API交互有关的功能。 内容类型…

RK3568 学习笔记 : 更改 u-boot spl 中的 emmc 的启动次序

环境 开发板&#xff1a; 【正点原子】 的 RK3568 开发板 ATK-DLRK3568 u-boot 版本&#xff1a;来自 【正点原子】 的 RK3568 开发板 Linux SDK&#xff0c;单独复制出来一份&#xff0c;手动编译 编译环境&#xff1a;VMware 虚拟机 ubuntu 20.04 问题描述 RK3568 默认 …

C++笔记:类和对象

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量&#xff0c;类型就像是定义了数据的规则&#xff0c;而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型&#xff0c;而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈&#xff0c;实现一个队列功能 add delete length 队列 用数组可以实现队列&#xff0c;数组和队列的区别是&#xff1a;队列是逻辑结构是一个抽象模型&#xff0c;简单地可以用数组、链表实现&#xff0c;所以数组和链表是一个物理结构&#xff0c;队列是一个逻…

Servlet-Filter实现反爬虫

以前用DotNetCore实现过反爬虫功能。在tomcat里面可以利用Servlet的Filter类实现请求的控制来达到反爬虫功能&#xff0c;进而增强JRT的web安全。 实现黑名单过滤器&#xff0c;对在黑名单列表的IP的所有请求都跳转到警告页面&#xff0c;业务各种请求自行定义加入黑名单 /* …

爆肝3k字!掌握Spring与Redis的高效交互:从Jedis到Spring Data Redis

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

数字孪生技术的应用场景

数字孪生技术是一种新兴技术&#xff0c;具有广阔的应用前景。目前&#xff0c;数字孪生技术已经在以下几个领域得到了广泛应用。数字孪生技术是一种具有革命性的技术&#xff0c;它将深刻改变我们的生活和工作方式。随着数字孪生技术的不断发展&#xff0c;我们可以期待在未来…