非常好用的C++跨平台网络通信Mongoose,随笔记录

news2024/11/26 16:25:33
  1. 简介

        Mongoose 是一个 C/C++ 网络库。它实现了事件驱动, TCP、UDP、HTTP、WebSocket、MQTT 的非阻塞 API。它连接设备 并将它们带到网上。自 2004 年以来,一些开源和商业 产品已经利用了它。它甚至运行在 国际空间站! Mongoose 使嵌入式网络编程变得快速, 坚固且简单。

        Mongoose 适用于 Windows、Linux、Mac 和许多嵌入式架构 如STM32、NXP、TI、ESP32等。它可以在现有的基础上运行 操作系统和 TCP/IP 堆栈(例如 FreeRTOS 和 lwIP)以及裸机上的操作系统和 TCP/IP 堆栈, 利用 Mongoose 的内置 TCP/IP 堆栈和网络驱动程序。

        参考网址:Mongoose :: Documentation

        参考代码:https://github.com/cesanta/mongoose/tree/master

  1. 架构图

        在操作系统环境中,Mongoose 使用 BSD 提供的套接字 API 通过操作系统的 TCP/IP 堆栈:

        在嵌入式裸机环境中,Mongoose可以利用自己内置的 与网络驱动程序堆栈 - 即它可以直接在硬件之上运行:

 

教程和示例#

开发环境#

  • 构建工具 - 设置开发环境以构建和运行 Mongoose 库示例以及开发新应用程序的指南。

网页用户界面#

  • 设备仪表板 - 本教程展示了如何构建设备仪表板的示例,这对于无头设备非常有用。
  • REST 基础知识 - 本教程将向您展示如何实现和使用基于 REST 的用户界面 (UI) 的基础知识。
  • 纯 JavaScript UI - 本教程将向您展示如何通过基于 REST 的后端实现基于 JavaScript 的纯用户界面 (UI)。
  • Preact UI - 本教程将向您展示如何通过基于 REST 的后端为用户界面 (UI) 实现基于 Preact 的前端。我们将在这里重点介绍 Preact UI 前端的基础知识。
  • 用户身份验证 - 本教程将向您展示如何通过基于 REST 的后端使用基于 Preact 的用户界面 (UI) 实现会话登录。我们将在这里重点介绍登录过程的基础知识。
  • 数据推送 - 本教程将向您展示如何将数据从设备推送到浏览器上运行的基于 JavaScript 的用户界面 (UI);使用 WebSocket 或基于 REST 的 API。
  • 嵌入式文件系统 - 本教程展示了如何将所有 Web 文件嵌入到链接到服务器二进制文件的打包文件系统中的示例;形成只读文件系统。
  • MQTT 仪表板 - 本教程展示了如何构建远程设备仪表板的示例,这对于处理远程设备非常有用。

HTTP#

  • HTTP 服务器 - 基本 HTTP 服务器教程将向您展示如何配置 HTTP 服务器,同时您可以熟悉事件管理器和服务器 API。
  • HTTP 客户端 - 本教程将向您展示如何使用 Mongoose 库实现 HTTP 客户端。
  • HTTP 代理客户端 - 本教程将向您展示如何在必须通过代理完成连接的地方使用 Mongoose 作为 HTTP 客户端。
  • HTTP 反向代理 - 本教程将向您展示如何使用 Mongoose 实现反向代理。
  • 文件上传 - 本教程将向您展示如何将文件上传到 Mongoose Web 服务器。
  • 巨大的响应 - 本教程将向您展示如何发送大于可用缓冲区内存的大量数据。
  • 视频流 - 本教程将向您展示如何以一系列 MJPEG 帧的形式发送视频流。

Websocket#

  • Websocket 服务器 - 本教程演示如何使用 Mongoose 库来实现 Websocket 服务器。
  • Websocket 客户端 - 本教程演示如何使用 Mongoose 库来实现 Websocket 客户端。
  • 基于 WS 的 JSON-RPC - 本教程演示如何使用 Mongoose 库通过 WebSocket 实现 JSON-RPC 功能。

MQTT#

  • MQTT 客户端 - 本教程演示如何使用 Mongoose 库来实现 MQTT 客户端。
  • MQTT 服务器 - 本教程演示如何使用 Mongoose 库来实现简单的 MQTT 3.1.1 服务器。
  • 基于 WS 客户端的 MQTT - 本教程演示如何使用 Mongoose 库来实现通过 WebSocket 连接到代理的 MQTT 客户端。
  • AWS IoT - 本教程演示如何使用 Mongoose Library 与 AWS IoT 服务进行通信。
  • MQTT 仪表板 - 本教程展示如何构建 MQTT 控制的无头设备的示例。

SSL/TLS#

  • SSL/TLS - 在本教程中,我们将介绍如何为服务器和客户端启用 SSL/TLS。

固件更新#

  • 固件更新 - 本教程将向您展示如何使用 Mongoose 库函数来实现固件更新。

其他#

  • 错误处理 - 如果连接由于某种原因失败,您可以在本部分找到如何操作的答案。
  • 多线程 - 本教程将向您展示如何在多线程环境中使用 Mongoose。
  • SOCKS5 服务器 - 本教程将向您展示如何使用 Mongoose 库函数来实现基于 TCP 的服务器,在本例中是 SOCKS5 代理服务器。
  • 计时器 - 本教程将指导您配置计时器回调,这是一种执行某些定期操作的机制。
  • TCP 客户端和服务器 - 这个简单的教程演示了如何使用 Mongoose 库来实现 TCP 客户端和服务器,甚至通过 TLS。
  • UART 桥 - 本教程展示如何通过网络发送 UART 数据的示例。
  • SMTP 客户端 - 这个简单的教程演示了如何使用 Mongoose Library 通过 TLS 实现 SMTP 客户端。
  • Mongoose 内置 TCP/IP 堆栈的驱动程序 - 编写您自己的驱动程序,将我们的通用 CMSIS 驱动程序移植到您的 ARM 设备

UDP#

  • 强制 DNS 服务器 - 本教程演示如何使用 Mongoose 库来实现强制 DNS 门户。设备配置通常需要它。
  • SNTP 时间同步 - 本教程将向您展示如何与远程 SNTP 服务器同步时间。
  • SSDP 搜索 - 本教程演示如何通过执行 SSDP 搜索来使用 Mongoose 库进行 UDP 通信。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】(堆)Top-k|堆排序

目录 概念: 堆的实现 构建 初始化 销毁 插入元素 往上调整 删除堆顶元素 往下调整 返回堆顶元素 返回有效个数 是否为空 堆排序 Top-k问题 ​编辑 创建数据 堆top-k 概念: 堆是将数据按照完全二叉树存储方式存储到一维数组中&#xff…

Python实验项目9 :网络爬虫与自动化

实验 1:爬取网页中的数据。 要求:使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求:使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…

网络 / day02 作业

1. TCP和UDP通信模型 1.1 TCP server #include <myhead.h>#define PORT 9999 #define IP "192.168.250.100"int main(int argc, const char *argv[]) {//1. create socketint sfd -1;if( (sfd socket(AF_INET, SOCK_STREAM, 0 ))-1 ){perror("socke…

YOLOv5改进 | SPPF | 将RT-DETR模型AIFI模块和Conv模块结合替换SPPF(全网独家改进)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型中的AIFI模块来替换YOLOv5中的SPPF。RT-DETR号称是打败YOLO的检测模型&#xff0c;其作为一种基于Transformer的检测方法&#xff0c;相较于传统的基于卷积的检测方法&#xff0c;提供了更为全面和深入的特征理解&#xff0c…

机器学习 | KNN算法

一、KNN算法核心思想和原理 1.1、怎么想出来的&#xff1f; 近朱者赤&#xff0c;近墨者黑&#xff01; 距离决定一切、民主集中制 1.2、基本原理 —— 分类 k个最近的邻居 民主集中制投票分类表决与加权分类表决 1.3、基本原理 —— 回归 计算未知点的值决策规则不同均值法与…

Vue2-动态组件案例

1.component介绍 说明&#xff1a; Type: string | ComponentDefinition | ComponentConstructor Explanation: String: 如果你传递一个字符串给 is&#xff0c;它会被视为组件的名称&#xff0c;用于动态地渲染不同类型的组件。这是一个在运行时动态切换组件类型的常见用例。…

西南科技大学数字电子技术实验六(智力竞赛抢答器的设计及FPGA实现)FPGA部分

一、实验目的 进一步掌握D触发器&#xff0c;分频电路&#xff0c;多谐振荡电器&#xff0c;CP时钟脉冲元等单元电路的设计。 二、实验原理 三、程序清单&#xff08;每条语句必须包括注释或在开发窗口注释后截图&#xff09; 逻辑代码&#xff1a; module contend ( inpu…

OpenCV 1.1:读取本地图片显示灰度图及CV版本

imread方法加载图像 imread 功能是加载图像文件成为一个 Mat 对象&#xff0c;其中第一个参数表示图像文件名称&#xff0c;第二个参数表示加载的图像是什么类型&#xff0c;支持常见的三个参数值IMREAD_UNCHANDED(<0) 表示加载原图&#xff0c;不做任何改变IMREAD_GRAYSCA…

Docker插件和扩展:深入Docker功能的完整指南

Docker作为一种流行的容器化技术&#xff0c;不仅令应用程序的部署更为便捷&#xff0c;同时也提供了丰富的插件和扩展机制&#xff0c;以满足更多复杂场景下的需求。本文将深入研究Docker的插件和扩展&#xff0c;提供更为详实和全面的示例代码&#xff0c;助力读者更好地理解…

DPO讲解

PPO算法的pipeline冗长&#xff0c;涉及模型多&#xff0c;资源消耗大&#xff0c;且训练极其不稳定。DPO是斯坦福团队基于PPO推导出的优化算法&#xff0c;去掉了RW训练和RL环节&#xff0c;只需要加载一个推理模型和一个训练模型&#xff0c;直接在偏好数据上进行训练即可&am…

计算机出现xinput1_3.dll缺失、五种详细解决方案

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是xinput1_3.dll丢失。这个错误提示通常会导致游戏或其他应用程序无法正常运行。那么&#xff0c;xinput1_3.dll文件到底是什么&#xff1f;它丢失会对电脑产生什么影响&#xff1f;本文将为您详…

1688订单详情对接及实现方案

一、引言 1688作为中国最大的B2B电子商务平台之一&#xff0c;提供了丰富的商品信息和订单详情。通过与1688订单详情接口的对接&#xff0c;电商企业可以实时获取订单详细信息&#xff0c;以便更好地了解客户需求、优化运营策略以及提高服务质量。本文将详细介绍如何实现1688订…

《数据结构、算法与应用C++语言描述》-机器调度-最长处理时间(LPT)-堆应用

机器调度 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_28LongestProcessingTime 问题描述 一个工厂具有 m台一模一样的机器。我们有n 个任务需要处理。设作业i的处理时间为 t i t_i ti​&#xff0c;这个时间包括把作业放入机器…

【PostgreSQL】从零开始:(十二)PostgreSQL-数据库对象关系及定义

从图中我们可以看出服务器对象的关系 现在我们来了解它们的定义 数据库服务器(Server) 数据库服务器是一种用来存储、管理和查询大量数据的服务器。它是一个独立的计算机系统&#xff0c;运行数据库管理系统&#xff08;DBMS&#xff09;软件&#xff0c;并提供对数据库的访问…

【ECMAScript笔记二】运算符分类,流程控制(顺序结构、分支结构、循环结构)

文章目录 4 运算符4.1 算术运算符4.2 递增和递减运算符4.3 比较运算符4.4 逻辑运算符4.5 赋值运算符4.6 运算优先级 5 流程控制5.1 顺序结构5.2 分支结构5.2.1 if 语句5.2.2 switch 语句 5.3 循环结构5.3.1 for循环5.3.2 while循环5.3.3 do while循环5.3.4 continue和break 5.4…

数据科学知识库

​ 我的博客是一个技术分享平台&#xff0c;涵盖了机器学习、数据可视化、大数据分析、数学统计学、推荐算法、Linux命令及环境搭建&#xff0c;以及Kafka、Flask、FastAPI、Docker等组件的使用教程。 在这个信息时代&#xff0c;数据已经成为了一种新的资源&#xff0c;而机…

1.新入手的32位单片机资源和资料总览

前言&#xff1a; 学了将近1年的linux驱动和uboot&#xff0c;感觉反馈不足&#xff0c;主要是一直在学各种框架&#xff0c;而且也遇到了门槛&#xff0c;比如驱动部分&#xff0c;还不能随心所欲地编程&#xff0c;原因是有些外设的原理还不够深刻、有些复杂的底层驱动的代码…

java springboot 内存级数据库 H2 创建表并添加数据演示

好 上文 java简述springboot通过配合初始化H2数据库并完成登录 带着大家登进了 h2数据库 这里需要强调 你只需要第一次加上 datasource:url: jdbc:h2:~/testhikari:driver-class-name: org.h2.Driverusername: rootpassword: 123456这些 因为它要初始化 你后面再启动 去掉这些…

C语言预处理详解及其指令

预处理详解 1.预定义符号2.#define定义常量基本使用方法举例子如果在define定义的表示符后面加上分号会发生什么&#xff1f;用一下来解释 3. #define定义宏举例例1例2 4. 带有副作用的宏参数例如: 5. 宏替换的规则6. 宏函数的对比宏和函数的一个对比 7. #和##7.1 #运算符7.2 #…

shell子进程管理

简介 在我们平时写代码过程中&#xff0c;可能经常会遇到串行执行速度慢 &#xff0c;串行无法执行多个任务&#xff0c;这时便需要使用子进程同时执行。使用父进程创建子进程时&#xff0c;子进程会复制父进程的内存、文件描述符和其他相关信息。当然&#xff0c;子进程可以独…