上位机图像处理和嵌入式模块部署(树莓派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 introspection
	xml_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,毕竟术业有专攻。

相关推荐
开开心心就好2 分钟前
禁止指定软件运行的小工具仅1M
人工智能·pdf·音视频·语音识别·big data·媒体·consul
君科程序定做3 分钟前
多源遥感与深度学习驱动的耕地识别与监测:概念重构、方法演进与研究议程
人工智能·深度学习·重构
梦梦代码精3 分钟前
Dify + 扣子 + n8n + BuildingAI:从零搭建写作自动化平台,踩坑与实战全记录
运维·人工智能·架构·gitee·开源·自动化
16Miku4 分钟前
飞书 lark-cli 深度解读:当办公软件遇上 AI Agent
人工智能·ai·飞书·agent·claudecode
蔚天灿雨4 分钟前
AI Agent 生产踩坑实录:8 个案例与防御模式
人工智能·ai·agent·ai编程
运营小白4 分钟前
2026年,我如何用AI自动化构建一个持续增长的博客矩阵
人工智能·经验分享·搜索引擎·自动化·ai自动写作
badhope6 分钟前
2025年3月AI领域纪录:从模型开源到智能体价值重估——风云变幻DLC
人工智能·python·深度学习·计算机视觉·数据挖掘
辻戋12 分钟前
Transformer的核心——注意力机制
人工智能·深度学习·transformer
苹果二12 分钟前
【工业智能】可解释机器学习在工业制造领域的应用
人工智能·机器学习·工业智能·可解释机器学习
ages_12313 分钟前
剪流AI智能手机的核心优势解析:驱动企业智能化转型的关键
人工智能·智能手机