嵌入式WebSocket的实现

2023-05-16

系统硬件采用STM32+DM9000AEP,具体实现步骤如下,

 

第一步建立TCP监听端口可以随意,等待浏览器发出http请求。

 

嵌入式WebSocket的实现

Chrome浏览器发出的请求

第二步建立握手

服务端需要解析最少4个头字段,并且提取Sec-WebSocket-Key,具体实现如下:

 

2.1定义字符串常量:

嵌入式WebSocket的实现

2.2截取Upgrade和Connection的头字段字符串值进行不分大小写比较,并记录比较结果。

Connection的头字段字符值不同浏览器有所不同,ChromeIE浏览器的值为“upgrade”,

火狐浏览器的值为“keep-alive, Upgrade”。

嵌入式WebSocket的实现

2.3截取Sec-WebSocket-Key和Sec-WebSocket-Version的头字段字符串值并保存。

嵌入式WebSocket的实现


2.4将截取WebSocket-Key加上258EAFA5-E914-47DA-95CA-C5AB0DC85B11进行SHA1加密,再进行Base64编码,这个值用于回复。

嵌入式WebSocket的实现


2.5回复浏览器握手请求,如果上叙4个比较失败,则不允许连接。

嵌入式WebSocket的实现

2.6正确的回复如下:其中Sec-WebSocket-Accept的值由2.4步得来,如果不同意连接需要回复“HTTP/1.1404 NotFound”或其他,成功握手,将会触发浏览器onopen事件。

嵌入式WebSocket的实现

到此为止可以通信了。

第三步数据通信

3.1此阶段可以使用TCP进行通信了,每个包都有一个包头,如:

 

82、8A、2C、AB、B0、F2为包头,之后为数据需要解码。

嵌入式WebSocket的实现

浏览器发给服务端的数据包

数据格式:

嵌入式WebSocket的实现

例如图3.1第一个字节和第二个字节82、8A,表示单个二进制包数据长度10个字节,有4个MASK-KEY码分别为:2C、AB、B0、F2。

数据为:     28、AF、B1、52、9C、AB、B0、F2、2C、AB。

解码后的数据:04、04、01、A0、B0、00、00、00、00、00。

 

解码函数如下,解码比较简单就是将MASK-KEY码逐一与数据进行异或运算。MASK-KEY通常为4个字节,也有可能是其他数字,可以从包总长度减其他计算得来。

嵌入式WebSocket的实现
3.2通信仲裁

嵌入式WebSocket的实现

3.3回复数据:

 

        为了减少计算量回复数据没有进行MASK-KEY编码,直接使用明码通信。82、4B为包头,之后为二进制数据共75个字节。

嵌入式WebSocket的实现

3.4停止通信:

        浏览器关闭时多数没有发送关闭帧,而是采用TCP来关闭,除IE浏览器主动发送pong帧保持心跳,其他浏览器采用TCP保持心跳。


 

效果图:
嵌入式WebSocket的实现

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

嵌入式WebSocket的实现 的相关文章

  • 第二次网页前端培训笔记(HBuilderX)

    常用标签 一 表单 form标签 xff1a 表单标签 xff0c 块级元素 xff0c 会自动换行 xff1b 将数据传输给服务器 常用属性 xff1a action 表单提交的地址url id 唯一标识 name 名称 target 表
  • 前端第7次培训

    对象 一对象的创建 1 字面量形式创建对象 var对象名 61 xff1b var对象名 61 键 xff1a 值 2 通过new Object创建 var对象名 61 new Object xff08 xff09 3 通过Object对象
  • MPU6050的再次深度学习与实操遇到问题

    数据的处理与实现 xff1a MPU6050芯片提供的数据夹杂有较严重的噪音 xff0c 在芯片处理静止状态时数据摆动都可能超过2 除了噪音 xff0c 各项数据还会有偏移的现象 xff0c 也就是说数据并不是围绕静止工作点摆动 xff0c
  • moderlarts第一次作业

    一 物体检测模型 以口罩检测为例 1 下载OBS 2 打开华为云 xff0c 找到modelarts控制台 xff0c 鼠标移到用户名上 xff0c 点击我的凭证 3 点击访问密钥 gt 新增访问密钥 xff0c 下载 xff0c 然后登陆
  • 培训modelarts 二

    一 进行声音分类 1 下载数据包 xff0c 导入OBS 2 创建声音分类项目 3 标签分类 4 开始训练 5 部署模型 6 预测结果 二 AI gallery 1 下载数据集 2 创建数据集 xff0c 导入外卖评论 3 进行创建文本分类
  • Jetson Xavier NX 配置(七)—— 数据传输之socket文件传输 & usb摄像头RTSP视频推流

    目录 1 Python socket 文件传输 xff08 1 xff09 发送单个文件 xff08 一次性 xff09 xff08 2 xff09 发送一个文件夹下的所有文件 xff08 一次性 xff09 xff08 3 xff09 发
  • 使用plist文件进行ipa的安装

    前提 将html 用户扫码 地址访问 ipa和plist放在https的远程服务器上 编写html文件 内容如下 lt DOCTYPE html PUBLIC W3C DTD XHTML 1 0 Transitional EN http w
  • 关于U盘变成RAW格式 windows无法格式化的解决方法

    网上有很多人说是U盘坏了 xff0c 其实不是这样 这个问题是可以解决的 xff0c 解决方法也是在网上搜索到的 xff0c 到这里同大家分享下 本人昨天使用U盘的时候就碰到了U盘变成RAW格式 xff0c 系统可以读出盘符 xff0c 但
  • Xcode11.6编写C++项目出现报错:vector or iostream file not found

    解决办法 xff1a
  • iPhone设备型号代码(iPhone 4s - iPhone 14)

    lt string gt iPhone15 3 lt string gt iPhone 14 Pro Max lt string gt iPhone15 2 lt string gt iPhone 14 Pro lt string gt i
  • [Linux] Vim 撤销 回退 操作

    在vi中按u可以撤销一次操作 u 撤销上一步的操作 Ctrl 43 r 恢复上一步被撤销的操作 注意 xff1a 如果你输入 u 两次 xff0c 你的文本恢复原样 xff0c 那应该是你的Vim被配置在Vi兼容模式了 重做 如果你撤销得太
  • 为什么系统进入到Checking Media Presence

    你按联想热启键来开机 xff0c 也就是那个还原键来开机 然后你选择BIOS Setup回车 选择Boot这项的boot mode把UEFI改成legacy support和boot priority把UEFI改成legacy 然后保存退出
  • MacBook Air响一声白屏故障情况说明及解决

    情况说明 xff1a 2013款的MacBook Air安装Windows 7系统 xff0c 结果导致开机响一声就白屏 xff0c 按option无选项出现 xff0c 其他各种组合按键尝试都无效 百度搜索 xff0c 有人说是屏幕故障
  • 如何在Eclipse中打开现有项目(高手免入)

    如果我们现在已经有了Java项目 xff08 网上下载的或者从别的电脑上拷贝过来的 xff09 xff0c 我们都知道 xff0c Eclipse和其他的编程软件不一样 xff0c 不能够通过直接双击某个文件的方式来打开 xff0c 那么我
  • svn is not a working copy 怎么解决

    确定当目录下是否含有 svn文件夹 如果没有就重新啊checkout xff0c 或者在上一层目录或下一层目录查找 xff0c 有则可执行 svn commit m 34 更新部分代码 34
  • CSS3设置Border边框是内边框还是外边框

    CSS3可以设置边框是向内还是向外 xff0c 如果要设置为内边框使用 1 box sizing border box 外边框 1 box sizing content box
  • If this view is optional add '@Nullable' (fields) or '@Optional' (methods) ...

    lt 在出错的activity中 xff0c 对应布局文件中加入 gt lt 不能缺少 xff0c 缺少后出现If this view is optional add 39 64 Nullable 39 fields or 39 64 Op
  • MTK Camera(OV13850) 驱动移植

    一 驱动源码包结构 拿到的驱动源码包解压后得到hal和kernel两个目录文件 xff0c 源码目录结构如下所示 13850 6592 driver 10 28 7z hal camera AE PLineTable ov13850mipi
  • 查看路由器WAN口IP是否为公网ip指南

    查看路由器WAN口IP是否为公网ip指南 吴捷 一 xff0e 公网ip和私网ip ip地址分类中常用的有A B C类 xff0c 每类IP中都规划了一段私网IP xff0c 除了这些私网外的IP都是公网IP 分类IP地址范围适用用户A1
  • [iOS] WKWebView 于JavaScript传值

    如果在项目中采用WKWebView的方法加载网页 OC向JS传值方法总结 xff1a 1 OC gt JS 传数组的方法 xff1a NSString arrStr 61 self arr componentsJoinedByString

随机推荐

  • iOS日历中的日程生成VCalendar 2.0(.vcs)格式的字符串和解析

    获取 VCalendar2 0 的格式字符串 43 NSString getVCalendar20StrWithEvents NSArray lt EKEvent gt events NSString vcalendar 61 NSStri
  • 数传电台术语详解

    数传电台 xff08 data radio xff09 是指借助DSP 技术和无线电技术实现的高性能专业数据传输电台 数传电台的使用从最早的按键电码 电报 模拟电台加无线MODEM xff0c 发展到目前的数字电台和DSP 软件无线电 xf
  • 无线数传电台的发展趋势

    摘自 专业无线通信 传媒 无线数传电台作为一种最简洁的通行方式 xff0c 具有很长的历史 xff0c 其基本的特征是通联方便 简捷 xff0c 同时也存在着封闭性强的特点 xff0c 正是由于上述原因 xff0c 无线数传电台产品的生命期
  • wget 提交post请求

    格式 xff1a wget post data 34 item1 61 value1 amp item2 61 value2 34 http xxx xxx com 示例 xff1a wget post data 34 username 6
  • 欧拉角、轴角与四元数

    1 欧拉角 欧拉角使用最简单的x y z值来分别表示在x xff0c y xff0c z轴上的旋转角度 xff0c 其取值为0 360 或者0 2pi xff09 xff0c 一般使用roll xff0c pitch xff0c yaw来表
  • Linux 系统投屏显示

    最近使用电脑跑Linux时需要用到显示器投屏 xff0c 于是快乐的拿上我的笔记本连上了投影仪 emmm 然鹅并没有什么卵用 果断问度娘 xff0c 看到好多人说使用xrandr命令设置 xff0c 于是便上手试了下 xff0c 看到我运行
  • C++ 判断一个 int 型整数是否为 2 的 N 次方(幂次)

    判断一个整数是否为2的幂次方法有以下几种 xff1a 1 循环除2 这是最简单最好理解的方式 对于一个数如果是2的幂次 xff0c 则其肯定可以被2一直整除直到其值为1 所以可以通过一个while循环判断 xff1a void judge
  • Dijkstra算法图文详解

    Dijkstra算法算是贪心思想实现的 xff0c 首先把起点到所有点的距离存下来找个最短的 xff0c 然后松弛一次再找出最短的 xff0c 所谓的松弛操作就是 xff0c 遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近 xff
  • 需求中如何画用例图

    UML用例图 用例图主要用来图示化系统的主事件流程 xff0c 它主要用来描述客户的需求 xff0c 即用户希望系统具备的完成一定功能的动作 xff0c 通俗地理解用例就是软件的功能模块 xff0c 所以是设计系统分析阶段的起点 xff0c
  • 反光板导航SLAM(二)VEnus代码浅析

    上一章简单介绍了VEnus中几个主要函数的作用 xff0c 这里详细展开看一下每个函数的具体思路 xff0c 通过研究具体的代码我们可以简单了解VEnus中对于反光柱定位的具体流程 1 IntensityExtraction Extract
  • TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(3))

    第一章主要分析了teb算法的准备条件 xff0c 包括获取当前位姿与速度 对全局路径的裁减以获取局部路径等以及局部地图的获取等 第二章主要讲述了在获取前置条件后 xff0c 如何根据前置条件进行位姿优化 xff0c teb的路径优化主要是调
  • TEB算法详解 参数详解

    teb算法的基本思路之前已经看完了 xff0c 今天主要看一下teb算法的参数配置文件 xff0c 分析一下每个配置参数的作用 xff1a teb的参数主要可以包含以下几个部分 xff1a 1 Trajectory Trajectory的参
  • ROS 如何用自己的电脑连接其他设备查看Rviz

    Rviz的使用在ROS开发中是很常见的东西 xff0c 有时候为了方便我们需要查看某台设备的一些数据 xff0c 但是又没有一些直观的连接工具例如向日葵之类的 这些工具是要基于屏幕的 xff0c 如果设备上没有屏幕是无法使用的 那在只有ss
  • 调试时正常,maven install 找不到符号

    找不到符号 很可能是引用的自己的库没有加载最新版 把所有库都clean gt install一下 或root项目下clean gt install
  • 【springboot】org.aspectj.lang.ProceedingJoinPoint获取返回类型、参数名称/值等

    1 参数值 span class token class name Object span span class token punctuation span span class token punctuation span args s
  • no opencv_java455 in java.library.path

    直接把 opencv build java x64下的文件opencv java455 dll复制到Java JDK安装的bin目录下就解决了这个问题
  • openssl pem 生成公钥和私钥及文件

    下载 xff1a http slproweb com products Win32OpenSSL html 首先得安装OpenSSL软件包openssl xff0c 安装了这个软件包之后 xff0c 我们可以做这些事情 xff1a o Cr
  • DebugDiag 2 收集Dump

    DebugDiag简介 Debug Diagnostic Tool DebugDiag 是微软提供的工具 xff0c 可以用来追踪windows平台下的程序崩溃 xff0c 卡死 xff0c 内存泄漏等一些疑难问题的原因 xff0c 按照问
  • Stream List 的排序

    1 list的正序 span class token class name List span span class token generics span class token punctuation lt span span clas
  • 嵌入式WebSocket的实现

    系统硬件采用STM32 43 DM9000AEP xff0c 具体实现步骤如下 xff0c 第一步建立TCP监听端口可以随意 xff0c 等待浏览器发出http请求 Chrome浏览器发出的请求 第二步建立握手 服务端需要解析最少4个头字段