C++之socket.io编译使用

2023-05-16

文章目录

    • 1. 什么是socket.io
    • 2. 开发环境配置
      • 2.1 获取socket.io的源码
      • 2.2 cmake安装
      • 2.3 boost安装
        • 2.3.1 获取源码
        • 2.3.2 解压编译下载
      • 2.4 rapidjson下载
      • 2.5 websocketpp下载
      • 2.6 编译socket.io
    • 3. socket.io测试
      • 3.1 建立测试程序

1. 什么是socket.io

  • Socket.IO 实现了实时双向的基于事件的通讯机制。旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制。

2. 开发环境配置

socket.io的编译需要安装如下依赖环境

  • cmake
  • rapidjson
  • boost
  • websocketpp

2.1 获取socket.io的源码

  • git clone https://github.com/socketio/socket.io-client-cpp.git

2.2 cmake安装

  • sudo apt-get install cmake

2.3 boost安装

2.3.1 获取源码

  • https://sourceforge.net/projects/boost/files/boost/ 把源码下载下来(boost_1_74_0.tar.bz2)

2.3.2 解压编译下载

  • tar -xvf boost_1_74_0.tar.bz2
  • cd boost_1_74_0/
  • ./bootstrap.sh
  • ./b2

2.4 rapidjson下载

socket.io的源码的目录结构如下:
├── API.md
├── boost_1_74_0.tar.bz2
├── BOOST.md
├── CMakeCache.txt
├── CMakeFiles
├── cmake_install.cmake
├── CMakeLists.txt
├── examples
├── INSTALL_IOS.md
├── INSTALL.md
├── lib
├── libsioclient.a
├── libsioclient_tls.a
├── LICENSE
├── Makefile
├── README.md
├── src
└── test

cd lib
.
├── rapidjson
└── websocketpp

把下载下来的源码放在rapidjson中

git clone https://github.com/Tencent/rapidjson.git

2.5 websocketpp下载

  • 和rapidjson下载同理进入把websocketpp下载的内容放到websocketapp中
  • git clone https://github.com/zaphoyd/websocketpp.git
最后lib中的目录结构如下:
├── rapidjson
│   ├── appveyor.yml
│   ├── bin
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── CMakeModules
│   ├── contrib
│   ├── doc
│   ├── docker
│   ├── example
│   ├── include
│   ├── include_dirs.js
│   ├── library.json
│   ├── license.txt
│   ├── package.json
│   ├── rapidjson.autopkg
│   ├── RapidJSONConfig.cmake.in
│   ├── RapidJSONConfigVersion.cmake.in
│   ├── RapidJSON.pc.in
│   ├── readme.md
│   ├── readme.zh-cn.md
│   ├── test
│   ├── thirdparty
│   └── travis-doxygen.sh
└── websocketpp
    ├── changelog.md
    ├── cmake
    ├── CMakeLists.txt
    ├── COPYING
    ├── docs
    ├── Doxyfile
    ├── examples
    ├── readme.md
    ├── roadmap.md
    ├── SConstruct
    ├── test
    ├── tutorials
    ├── websocketpp
    └── websocketpp-config.cmake.in

2.6 编译socket.io

cmake -DBOOST_ROOT:STRING=/home/fzj/socketio/boost_1_74_0(boost安装的位置)  -DBOOST_VER:STRING=1.74.0(boost版本) .

make

make install

最后会生成build,里面有
├── include(静态库对应的头文件)
│   ├── sio_client.h
│   ├── sio_message.h
│   └── sio_socket.h
└── lib(socket.io的静态库)
    └── Release
        ├── libboost_date_time.a
        ├── libboost_random.a
        ├── libboost_system.a
        ├── libsioclient.a
        └── libsioclient_tls.a

3. socket.io测试

3.1 建立测试程序

//把上面编译出来的头文件拉倒当前测试程序的文件夹中

#include <iostream>
#include "sio_client.h"
#include "sio_socket.h"
#include "string.h"

using namespace std;
using namespace sio;


int main()
{

    sio::client h;
    std::string nickName = "123"

    h.connect("https://域名:端口");
    h.socket()->emit("readyToStream", nickName);

    cout << "Hello, world!" << endl;
    return 0;
}

g++ sockiotest.cpp  -o test /home/fzj/socketio/socket.io-client-cpp/build/lib/Release/libsioclient.a -lpthread  
[2020-09-24 02:15:11] [connect] Successful connection
[2020-09-24 02:15:11] [error] handle_read_http_response error: websocketpp.transport:7 (End of File)

编译后出现该情况,经上网查询后,发现这个问题是TLS的问题,如果是https建议我们使用libsioclient_tls.a这个库,使用这个库确保你虚拟机上安装有openssl。(经常测试无论http还是https还是一样的效果)

更改使用libsioclient_tls.a这个库后会报另外的错误
g++ sockiotest.cpp  -o test /home/fzj/socketio/socket.io-client-cpp/build/lib/Release/libsioclient_tls.a -lpthread  -lm -lssl -lcrypto

[2020-09-24 02:10:39] [connect] Successful connection
[2020-09-24 02:10:39] [error] handle_transport_init received error: TLS handshake failed
[2020-09-24 02:10:39] [info] asio async_shutdown error: asio.ssl:336462231 (shutdown while in init)

经过3个小时的尝试和不断的努力,终于找到了答案,原始是TLS的版本问题,客户端和服务端不同
于是修改socket.io的源码

1. 找到sio_client_impl.cpp原文件(/src/internal/sio_client_impl.cpp)
2. 打开文件/src/internal/sio_client_impl.cpp
3. 找到源码如下位置
#if SIO_TLS
    client_impl::context_ptr client_impl::on_tls_init(connection_hdl conn)
    {
        //!更改boost :: asio :: ssl :: context :: tlsv1 -----> boost :: asio :: ssl :: context :: tlsv12
        context_ptr ctx = context_ptr(new  boost::asio::ssl::context(boost::asio::ssl::context::tlsv1));
        boost::system::error_code ec;
        ctx->set_options(boost::asio::ssl::context::default_workarounds |
                             boost::asio::ssl::context::no_sslv2 |
                             boost::asio::ssl::context::single_dh_use,ec);
        if(ec)
        {
            cerr<<"Init tls failed,reason:"<< ec.message()<<endl;
        }
        
        return ctx;
    }
#endif
4. 保存文件重新编译安装,参照2.6 编译socket.io
5. 重新测试,测试成功,已经完成连接
[2020-09-24 02:56:13] [connect] Successful connection
[2020-09-24 02:56:13] [connect] WebSocket Connection 129.204.161.74:8091 v-2 "WebSocket++/0.8.2" /socket.io/?EIO=4&transport=websocket&t=1600941373 101

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++之socket.io编译使用 的相关文章

  • android的surfaceflinger原理学习

    概念 SurfaceFlinger是一个系统服务 xff0c 如 xff1a audioflinger xff0c audiopolicyservice等等 xff0c 系统的主要服务通过这个文章进行了解 xff0c Android的系统服
  • labview界面分隔和自定义窗口大小

    gt gt gt gt gt gt 我的博客目录导航 转自 statemic LabVIEW程序界面的布局 控件的显示效果与监视器是密切相关的 xff0c 因此在程序设计时需要考虑目标监视器的颜色 分辨率等因素 xff0c 并明确运行该应用
  • CAN通信矩阵的理解(CAN报文信号的属性)

    CAN通信矩阵 1 CAN通信矩阵是什么 CAN通信矩阵 xff08 CAN Communication Matrix xff09 通常由整车厂完成定义 xff0c 车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享 我们知道C
  • Android OMX介绍(总括)

    一 OpenMax简介 xff08 缩写为 xff1a OMX xff09 OpenMAX是一个多媒体应用程序的标准 由NVIDIA公司和Khronos 在2006年推出 它是无授权费的 跨平台的C语言程序接口序列 xff0c 这些接口对音
  • 从此以后谁也别说我不懂LDO了

    LDO是个很简单的器件 xff0c 但是我跟客户沟通的过程中 xff0c 发现客户工程师的技术水平参差不齐 xff0c 有的工程师只是follow 别人以前的设计 xff0c 任何原理和设计方法都不懂 xff0c 希望大家看完这篇文章都能成
  • 屏下指纹技术实现方案与原理

    1月24日 xff0c 全球第一台量产的屏幕指纹手机vivo X20 Plus屏幕指纹版正式在北京亮相 据悉 xff0c 该手机屏幕指纹版已经支持支付宝和微信的指纹支付 vivo X20 Plus屏下指纹 xff0c 其原理是利用光电反射技
  • linux系统的休眠与唤醒简介

    系统挂起 xff08 Suspend xff09 是电源管理 xff08 APM amp ACPI xff09 的一个特性 xff0c 给用户带来了很大的方便 Linux在2 6系列核心中对电源管理有了较好的支持 xff0c 下面就谈谈Li
  • 奇偶校验的概念

    奇偶校验 Parity Check 是一种校验代码传输正确性的方法 根据被传输的一组二进制代码的数位中 34 1 34 的个数是奇数或偶数来进行校验 采用奇数的称为奇校验 xff0c 反之 xff0c 称为偶校验 采用何种校验是事先规定好的
  • HTTP Basic, Session, Token 三种认证方法简介

    1 概述 本文简介 HTTP Basic xff0c Session xff0c Token 三种认证方法 Basic 认证 xff1a 户籍部门已给你签发了一张身份证 你每次去办事 xff0c 都要带上身份证证 xff0c 后台要拿你的身
  • 车路协同、智能网联方面的英文专业词汇

    车路协同系统 Cooperative Vehicle Infrastructure System xff08 CVIS xff09 车辆对基础设施 Vehicle to Infrastructure V2N 车辆对网络 Vehicle to
  • 国内外知名激光雷达企业盘点

    https mp weixin qq com s KBOZfM qP9y oCAB6FxZxQ 国外知名产品 品牌 图示 所属国家 核心产品 Velodyne 美国 机械式激光雷达 HDL 64E HDL 32E VLP 16 车规级 激光
  • 激光雷达的性能指标-以大疆livox-Mid40激光雷达为例

    xff08 看了一下 xff0c 有网上列表的探测范围数据与本文截图不太一致 xff0c 本文截图来自livox官网手册 xff09 有人问我 这个参数是什么意思 xff0c 在此解释一下 xff1a 激光打到不同的射物上 xff0c 能反
  • 《FlowNet3D》(CVPR2019)--直接从点云中估计场景流

    暴走兔学习了CVPR 2019的论文 xff1a FlowNet3D Learning Scene Flow in 3D Point Clouds xff0c 为了更好的理解该论文 xff08 年纪大了容易忘 xff09 xff0c 在此做
  • 增量式PID和位置式PID

    转自 panpan 0315的博客 原文地址 http www eefocus com panpan 0315 blog 10 08 194022 25161 html 1 先介绍几个概念 xff0c 首先是比例带 比例带是一个无量纲的纯数
  • 需要基于消失点标定资料的亲们注意啦!(Especially for私信和留言给我的小伙伴)

    需要基于消失点标定资料的亲们注意啦 xff01 xff08 Especially for私信和留言给我的小伙伴 xff09 截图为我调研和筛选之后的经典文献 xff0c 已上传至CSDN xff0c 请移步到该链接下载 https down
  • 解决error:OpenCV4.3.0 无法解析的外部符号 void __cdecl cv::imshow

    今天用opencv 4 3 0写demo xff0c 遇到编译错误 xff1a error LNK2019 无法解析的外部符号 void cdecl cv imshow xff0c 反复检查了几次VS的配置 xff0c 确定自己包含了头文件
  • 毫米波雷达和视觉融合简记

    毫米波雷达和视觉传感器融合笔记 毫米波雷达和摄像头概述毫米波雷达和视觉传感器融合时间融合空间融合 写在前面 xff1a 1 按照信息抽象的五个层次 xff0c 融合可分成五个级别 xff0c 即 xff1a 检测级融合 位置级融合 属性 x
  • 多目标跟踪-DeepSort分析(一)论文解读及代码架构

    先引入多目标跟踪DeepSort的论文地址及代码链接 xff08 Python版 xff09 xff1a 论文地址 xff1a https arxiv org pdf 1703 07402 pdf 代码链接 xff1a https gith
  • stm32f4xx 加密

    文章参考http www 61ic com Technology embed 201311 50853 html xff0c 一 ID获取 34 设备电子签名 电子签名存储在 Flash 区 可以使用 JTAG SWD 或 CPU 对其进行
  • C++为什么要学习STL和Boost库

    最近一年我电话面试了数十位 C 43 43 应聘者 xff0c 惯用的暖场问题是 工作中使用过 STL 的哪些组件 xff1f 使用过 Boost 的哪些组件 xff1f 得到的答案大多集中在 vector map 和 shared ptr

随机推荐

  • 智能硬件新产品开发逻辑

  • 移动机器人入门介绍

    移动机器人技术应用 xff1a 天上飞的 xff0c 水里游的 xff0c 地上跑的 xff0c 都可以应用移动机器人领域的技术 比如说 xff0c 1 工业机器人 xff0c 搬运机器人 xff08 AGV xff09 xff1b 2 商
  • 占据栅格地图(occupancy grid maps) -- 二值贝叶斯滤波应用

    其实 xff0c 我想讲的关键点是二值状态的最优估计问题 xff0c 而不仅仅是栅格地图 Anyway xff0c that is a good example 机器人的地图表示方式有多种 xff0c 如拓扑地图 特征地图 直接表征法 栅格
  • 粒子滤波实现及推导

    一 应用 example xff1a 机器人全局定位 粒子滤波实现过程解读 二 推导 从贝叶斯到粒子滤波 三 工程化细节探讨 这是草稿 xff0c 待完善
  • 卫星信号的上行下行学习笔记

    gt gt gt gt gt gt 我的博客目录导航 最近被卫星电视信号的发射接收过程弄的头疼 xff0c 于是潜心找了本书 卫星电视接收DIY 细细看看下 1 地面信号上星 以前在家弄个 锅 看看电视 xff0c 电视里主持人录节目 xf
  • 信息与不确定性

    最近学习了吴军的 信息论40讲 xff0c 深有感触 xff0c 有感而发 xff01 本博文想要给你传递 xff08 或者说洗脑 xff09 两个主要观点 xff1a 信息是可以量化的 xff0c 用事件的不确定性表示 xff0c 增加相
  • AlexeyAB/darknet (YOLO)的编译 和 作为动态库进行使用 以及 训练 自定义 数据(检测网络和分类网络)

    ubuntu 编译 https github com AlexeyAB darknet 这个库很贴心了 xff0c 当然 xff0c 主要是 darknet的实现也很硬核 xff0c 自带图像编解码 xff0c 各种造轮子 文档 把 各种用
  • LoRa和NB-IoT有什么区别?LoRa的优势在哪些方面?

    对于LoRa技术 xff0c 行业内人士都不会陌生 xff0c 它也经常会被拿来和NB IoT技术比较 作为低功耗广域网 xff08 LPWAN xff09 的新兴技术 xff0c 两种技术都备受关注 对于LoRa技术 xff0c 行业内人
  • Source Insight 4.0最好看的主题

    推荐一款sourceinsight主题 xff0c 4 0适用 xff0c 配色本人觉得非常舒服 使用方法 xff1a 1 安装Sourceinsight 2 安装字体 xff1a YaHei Consolas Hybrid 1 12 tt
  • Notepad++最好看的主题

    Notepad 43 43 最好看的主题 xff0c 收藏了很久 xff0c 现在拿出来和大家分享 配色如下 xff1a 使用方法 xff1a 1 安装Notepad 43 43 2 将KamiTheme xml放到 Notepad 43
  • DTLS协议中client/server的认证过程和密钥协商过程

    1 DTLS介绍 1 1 DTLS的作用 互联网先驱们最开始在设计互联网协议时主要考虑的是可用性 xff0c 安全性是没有考虑在其中的 xff0c 所以传输层的TCP UDP协议本身都不具备安全性 SSL TLS协议是基于TCP socke
  • Ubuntu18.04 实现串口通信

    最近由于项目需要 xff0c 研究了关于在ubuntu下串口通信的功能实现 期间遇到一些问题 xff0c 跟大家分享下 1 代码 comm service h ifndef comm service h define comm servic
  • [STM32] 串口数据帧处理(第一弹)

    文章目录 1 串口使用的常用场景2 字节帧处理总结 1 串口使用的常用场景 使用串口的主要目的是实现数据的交互 xff0c 数据的交互的方法脱身于常用的场景 这里描述一个比较典型的场景 xff1a MCU作为主控制器通过串口和外部的设备或者
  • 串口编程—(1)串口基本知识

    串口是用来干什么的 xff1f 串行接口 简称串口 xff0c 也称 串行通信 接口或 串行通讯接口 xff08 通常指 COM接口 xff09 xff0c 是采用 串行通信 方式的扩展接口 串行接口 Serial Interface 是指
  • C语言操作redis数据库

    文章目录 1 开发环境2 C语言redis库 hiredi安装配置2 1 下载并且解压hiredis2 2 hiredis安装 3 hiredis简单测试4 运行出错解决办法5 验证5 1 运行程序5 2 redis客户端验证 1 开发环境
  • 5.0 NuttX File System

    转载请注明出处 xff1a 5 0 NuttX File System Alvin Peng的博客 CSDN博客 文章均出自个人理解 前言 前一段时间折腾了几个驱动 xff08 PWM Serial I2C xff09 xff0c 这次来折
  • 使用cmake构建一个大型项目框架

    文章目录 使用CMake构建一个大型项目工程1 大型工程目录结构介绍1 1 工程目录结构介绍1 2 工程目录说明 xff08 我是这样设计的 xff0c 你们也可以参考类似这样设计 xff09 1 3 最外层CMakeLists txt说明
  • github下载加速的几种方法

    文章目录 1 github加速的几种办法1 1 把github的代码 xff0c 转到码云上1 2 有人做了github的代下载网站 xff0c 可以从上面进行下载1 3 使用cnpmjs镜像进行加速1 4 使用国外服务器进行搭桥 2 总结
  • EasyLogger的代码解读和移植(linux和stm)

    文章目录 1 EasyLogger目录结构分析 2 EasyLogger之docs查看总结 2 1 EasyLogger之docs查看 2 1 2 api gt kernel md文档 2 1 3 port gt kernel md文档 2
  • C++之socket.io编译使用

    文章目录 1 什么是socket io2 开发环境配置2 1 获取socket io的源码2 2 cmake安装2 3 boost安装2 3 1 获取源码2 3 2 解压编译下载 2 4 rapidjson下载2 5 websocketpp