boost库,websocket服务器

embedded/2024/10/22 11:13:17/

绑定client端的ip和port,监听client的消息,如果对方发送一个json格式的字符串,就给对方回复一个json格式的“type-join”

#include <boost/asio.hpp>
#include <boost/beast.hpp>
#include <boost/beast/websocket.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
#include <string>using namespace std;
namespace asio = boost::asio;
namespace websocket = boost::beast::websocket;
namespace property_tree = boost::property_tree;int main()
{// 创建 asio 的 io_contextasio::io_context io;// 创建一个 WebSocket 监听器websocket::listener listener(io);const string address = "127.0.0.1";  // 绑定的 IP 地址const short port = 8080;             // 绑定的端口号// 绑定 IP 和端口listener.set_option(asio::socket_base::reuse_address(true));listener.open(asio::ip::tcp::endpoint(asio::ip::make_address(address), port));// 开始监听listener.listen();cout << "Server started on " << address << ":" << port << endl;// 接受连接并处理 WebSocket 请求listener.async_accept([&](auto ec, auto socket) {if (ec) {cerr << "Accept error: " << ec.message() << endl;return;}// 接收消息socket.async_read([&](auto ec, auto buffer) {if (ec) {cerr << "Read error: " << ec.message() << endl;return;}// 将接收到的数据转换为字符串const string data = boost::beast::buffers_to_string(buffer.data());cout << "Received message: " << data << endl;// 解析 JSON 数据property_tree::ptree pt;property_tree::read_json(std::istringstream(data), pt);// 生成回复的字符串property_tree::ptree reply_pt;reply_pt.put("type", "join");std::ostringstream oss;property_tree::write_json(oss, reply_pt);// 回复消息const string reply_str = oss.str();socket.async_write(asio::buffer(reply_str), [&](auto ec, size_t) {if (ec) {cerr << "Write error: " << ec.message() << endl;}else {cout << "Sent message: " << reply_str << endl;}socket.close(websocket::close_code::normal);io.stop();});});});// 开始运行 io_contextio.run();return 0;
}


http://www.ppmy.cn/embedded/15485.html

相关文章

ubuntu ROS1 C++下使用免安装eigen库的方法

1、eigen库的定义及头文件介绍 Eigen是一个高层次的C 库&#xff0c;有效支持线性代数&#xff0c;矩阵和矢量运算&#xff0c;数值分析及其相关的算法。 2、获取eigen库安装包 下载地址&#xff1a;eigen库官网 &#xff0c;如下图所示&#xff1a; 下载最新版tar.bz2即可&…

【Hadoop】-HDFS的Shell操作[3]

目录 前言 一、HDFS集群启停命令 1.一键启停脚本可用 2.独立进程启停可用 二、文件系统操作命令 1、创建文件夹 2、查看指定目录下内容 3、上传文件到HDFS指定目录下 4、查看HDFS文件内容 5、下载HDFS文件 6、拷贝HDFS文件 7、追加数据到HDFS文件中 8、HDFS数据移…

浏览器的工作原理

参考&#xff1a;渲染页面&#xff1a;浏览器的工作原理 - Web 性能 | MDN (mozilla.org) Web 性能 | MDN (mozilla.org) Web性能影响因素 首先有两个&#xff0c;一个是网络延迟&#xff0c;一个是大部分情况下浏览器都是单线程执行的 保障页面快速加载的最大威胁是网络延迟…

快速了解 Rust 文档注释功能

Rust 的文档注释使用特定的格式&#xff0c;以便通过 rustdoc 工具生成 API 文档。以下是一些 Rust 文档注释的基本要求和建议&#xff1a; 注释格式&#xff1a; 文档注释以三个斜杠 /// 开始&#xff0c;而不是单个或双个斜杠。注释应该紧接在要注释的代码项&#xff08;如函…

nginx反向代理.NetCore开发的基于WebApi创建的gRPC服务

一、本文中使用的工具: Vs2022使用.NET 8.0开发基于ASP.NET Core WebApi的gRPC服务; Nginx:1.25.5,下载地址:http://nginx.org/en/download.html 二、gRPC介绍: 由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。在vs2022中可以直接创建gRP…

qt——窗口置灰不可操作

在Qt中实现一个窗口&#xff08;或窗口中的特定部分&#xff09;置灰并不可操作&#xff0c;通常涉及到两个概念&#xff1a;禁用窗口的交互功能以及视觉上的置灰效果。下面我会介绍如何使用Qt实现这两个功能。 1. 禁用窗口的交互功能 如果你希望整个窗口都不可交互&#xff0c…

00_Linux

文章目录 LinuxLinux操作系统的组成Linux的文件系统Linux操作系统中的文件类型Linux操作系统的组织结构 Linux vs WindowsNAT vs 桥接模式 vs 仅主机Linux Shell命令Linux⽂件与⽬录管理相关指令目录文件普通文件文本编辑 用户管理添加用户删除用户用户组管理 文件权限管理权限…

华为OD机试真题-反射计数-2023年OD统一考试(C卷D卷)

题目描述: 给定一个包含 0 和 1 的二维矩阵 给定一个初始位置和速度 一个物体从给定的初始位置触发, 在给定的速度下进行移动, 遇到矩阵的边缘则发生镜面反射 无论物体经过 0 还是 1, 都不影响其速度 请计算并给出经过 t 时间单位后, 物体经过 1 点的次数 矩阵以左上角位置为[…