上位机图像处理和嵌入式模块部署(树莓派4b和类muduo网络编程)

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

  

        既然是linux编程,那么自然少不了网络编程。在linux平台上面,有很多的网络编程库可以选择,大的有boost、qt,小的有libevent,总觉得用的不是很顺手。其实在linux上面,还有一个国人写的网络库muduo,是比较小巧的,使用上面也很方便,大家可以多多使用。本身它是面向linux服务器多线程编程的,用它来写一个类ros的通信框架,再合适不过了。

        本次实验用的是一个同学改写的类muduo,正版的muduo代码地址,大家可以参考这个链接。原版的muduo相对干净一点,基本上mkdir build && cd build && cmake .. && make就可以了。此外,正版本muduo所有的可执行文件都安装在build的bin目录下。

https://github.com/chenshuo/muduo/tree/master

1、下载代码

        代码可以直接从github上面下载。

https://github.com/shenmingik/muduo

2、解压代码

        解压的话就比较容易了,直接输入unzip muduo-main.zip即可。

3、开始编译

        解压的目录下面有一个build目录,里面的文件全部删除。cd到build目录里面,直接输入cmake ..即可。

4、编译过程中的两个问题

        cmake生成makefile之后,就可以开始编译了。编译过程中有两个问题,一个是提示我们找不到string定义,还有一个提示我们找不到snprintf的定义。解决方法也不复杂,首先需要Thread.hpp里面添加一个#include <string>的声明。另外snprintf的问题,则在Thread.cpp当中添加一个#include <pthread.h>的声明,这样就没什么问题了。

        至此,如果一切正常,就可以在lib目录下看到生成的动态库libmymuduo.so了。

5、准备编译example中的测试文件

        example里面有一个testserver.cc文件,可以用来测试和编译,

#include <TcpServer.hpp>
#include <string>
#include <functional>

using namespace std;
using namespace placeholders;

class EchoServer
{
public:
    EchoServer(EventLoop *loop, InetAddress &addr, string name)
        : server_(loop, addr, name), loop_(loop)
    {
        //注册回调函数
        server_.set_connection_callback(bind(&EchoServer::on_connection, this, _1));
        server_.set_message_callback(bind(&EchoServer::on_message, this, _1, _2, _3));

        //设置线程数量
        server_.set_thread_num(3);
    }
    void start()
    {
        server_.start();
    }

private:
    //连接建立或者断开的回调
    void on_connection(const TcpConnectionPtr &conn)
    {
        if (conn->connected())
        {
            LOG_INFO("conn up: %s", conn->get_peeraddr().get_ip_port().c_str());
        }
        else
        {
            LOG_INFO("conn down: %s", conn->get_peeraddr().get_ip_port().c_str());
        }
    }

    //可读事件回调
    void on_message(const TcpConnectionPtr &conn, Buffer *buffer, TimeStamp time)
    {
        string msg = buffer->retrieve_all_asString();
        conn->send(msg);
        conn->shutdown();
    }

private:
    EventLoop *loop_;
    TcpServer server_;
};

int main()
{
    EventLoop loop;
    InetAddress addr(8000);
    EchoServer server(&loop, addr, "echo 01");
    server.start();
    loop.loop(); //启动main loop的底层poller
    return 0;
}

        输入g++ testserver.cc -I../include -g -o testserver ../lib/libmymuduo.so之后,提示我们头文件不对,这个时候把头文件当中的mymuduo/删去就可以编译通过了。

6、执行tesetserver程序

        编译没有问题之后,就可以开始执行了。首先需要把so文件从lib目录拷贝过来,接着就是./testserver开始执行,这个时候提示我们找不到动态库文件,其实配置一下LD_LIBRARY_PATH就可以了。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD

        执行后的打印应该是这样的,

feixiaoxing@raspberrypi:~/Desktop/mudoo/muduo-main/MyMuduo/example $ ./testserver
[INFO]2024-04-21 13:18:35 : func = update_channel fd = 4 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 7 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7f8a17e5d0 start looping

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 9 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7f8996e5d0 start looping

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 11 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7f8915e5d0 start looping

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 5 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7fcaf25c10 start looping

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】系统安全及应用

目录 一、账号安全基本措施 1.系统账号清理 2.密码安全控制 3.历史命令安全管理 4.限制su切换用户 1&#xff09;将信任的用户加入到wheel组中 2&#xff09;修改su的PAM认证配置文件 5.ssh远程登录输入三次密码错误则锁定用户 二、Linux中的PAM安全认证 1.su命令的…

革命性创新,实景AI无人自动直播系统,轻松实现24小时日不落直播卖券。

革命性创新&#xff01;实景AI无人自动直播系统&#xff0c;轻松实现24小时日不落直播卖券&#xff01; 最近&#xff0c;越来越多的朋友纷纷关注到了AI自动直播带货的新玩法&#xff0c;并且也都想要开设自己的自动直播间。然而&#xff0c;对于这种自动讲解、自动回复的直播…

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号&#xff1a;Qt 学…

C语言枚举类型详解

下午好诶&#xff0c;今天小眼神给大家带来一篇C语言枚举类型详解的文章~ 目录 一、枚举类型的声明 二、枚举类型的优点 三、枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是 一 一 列 举 。 比如&#xff1a; 一周从周一到周日共有七天&#xff0c;可以一一列举。 性…

Next.js多页布局getLayout使用方法

目录 官网解释 直接上代码使用方法展示 1.page页面​编辑 2._app.js页面,也放在pages中​编辑 效果展示 有getLayout展示getLayout返回的页面布局 无getLayout展示默认布局 官网解释 如果需要多个布局&#xff0c;可以添加一个属性getLayout添加到您的页面&#xff0c;允…

xpath的使用以及原理-元素定位

# 查找文本框输入文本 driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("i_cecream查找到了") #查找到之后点击 driver.find_element(By.CLASS_NAME,"nav-search-btn").click()time.sleep(30)selenium4的解析。 client调用se…

【draw.io的使用心得介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

webpack-babel2

浏览器的兼容性问题 浏览器的兼容性问题不知包括随屏幕大小而变化&#xff0c;还包括针对浏览器支持的特性&#xff08;如css特性&#xff0c;js特性&#xff09; 做处理。 目前市场上有很多浏览器&#xff1a;Chrome,Safari,IE,Edge等&#xff0c;要根据它们的市场占有率来决…

数据分析(1)

数据分析基础&#xff08;1&#xff09; 为了让刚开始学习的朋友对数据分析有一个清晰的整体认识&#xff0c;因此笔者在此对数分进行一个较为详细的介绍有助于大家更好的在宏观层面进行理解&#xff0c;避免在后续学习中产生迷茫。 数据分析的概念 定义&#xff1a;数据分析…

Linux系统-进程和计划任务管理

一.程序和进程 1.程序 保持在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码 2.进程 在CPU及内存中运行的程序代码动态执行的代码父、子进程每个程序可以创建一个或多个进程 3.进程特征 动态性&#xff1a;进程是程序的一次执行过程&#xff0c;是临时的&…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

Cyber Weekly #3

赛博新闻 1、Meta发布最强开源模型Llama3[1] 4月19日凌晨&#xff0c;Meta Llama 3发布&#xff0c;模型包含8B和70B两种参数规模&#xff08;400B还在训练中&#xff09;&#xff0c;Llama 3使用了超过 15T token的训练数据&#xff0c;8B版本数据更新截止至2023年3月&#…

属性文件出现问号,更改配置文件的编码格式

场景 场景&#xff1a;配置了properties文件&#xff0c;结果涉及到中文的部分都是问号原因&#xff1a;因为配置文件的默认编码格式iso的&#xff0c;这种编码格式下压根没有中文解决方案&#xff1a;使用IDEA将全局编码格式设置为utf-8 第一步&#xff1a;File->Settings-…

SRS WebRTC Whip 和 Whep 部署体验问题

whip 報錯 404 webrtc推流 小窗口一闪而过&#xff0c;然后查看f12回复404的报错信息 chrome版本&#xff1a; 正在检查更新 版本 123.0.6312.123&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; centos 7.9 源码安装部署&#xff0c; 代码分支5.0 完全按…

判断完数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 0;int i 1;int j 0;int result 1;//提示用户&#xff1b;printf("请输入一个…

指针专题(3)

1.前言 本节我们书接上文&#xff0c;继续进行指针专题的学习&#xff0c;夯实指针的基础&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习 2.字符指针变量 我们知道&#xff0c;字符指针的形式为char*&#xff0c;我们可以取出一个字符的地址&#xff0c;并且…

游戏测试之常见控制技能(下)

备注&#xff1a;未经博主允许禁止转载 个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_w…

4月21敲一篇猜数字游戏,封装函数,void,无限循环,快去体验体验

今天敲一篇猜数字游戏 目录 今天敲一篇猜数字游戏 1.打开先学goto语句&#xff1a; 2.开干&#xff1a; 首次我们学习随机数&#xff1a; 讲解一下&#xff1a; 改用srand; 加入时间变量&#xff1a; 获取时间&#xff1a;哈​编辑 3.我本来想已近够完美了&#xff0…

Redis 逻辑过期策略设计思路

引言&#xff1a; 当我们平常使用Redis缓存的时候&#xff0c;会出现一种场景&#xff0c; redis的key到过期时间了&#xff0c;总是需要到数据库里面去查一遍数据再set回redis&#xff0c;这个时候如果数据库响应比较慢&#xff0c;那么就会造成用户等待&#xff0c;如果刚好…

rancher-rke2 修改--service-cluster-ip-range

一、场景 因为需要部署新版本的ingress-nginx&#xff0c;而部署ingress-nginx的时候需要使用hostnetowrk以及nodeport的端口为80和443&#xff0c;service-node-port-range 默认为30000开始,部署会报错。 二、产生修改的需求 1、api-servier的配置文件位置 默认是没有的&…