搜索
bottom↓
回复: 95

STM32嵌入式WebSocket,实现浏览器stm32双向实时通信

  [复制链接]

出0入0汤圆

发表于 2014-7-14 14:34:33 | 显示全部楼层 |阅读模式
本帖最后由 lzg1518 于 2014-7-14 15:22 编辑

利用websocket实现浏览器和stm32之间双向实时通信,支持二进制和文本通信.
系统硬件采用STM32+DM9000AEP,具体实现步骤如下,

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

                Chrome 浏览器发出的请求
第二步建立握手
服务端需要解析最少4个头字段,并且提取Sec-WebSocket-Key,具体实现如下:
2.1定义字符串常量:


2.2截取Upgrade和Connection的头字段字符串值进行不分大小写比较,并记录比较结果。
Connection的头字段字符值不同浏览器有所不同,Chrome IE浏览器的值为“upgrade”,
火狐浏览器的值为“keep-alive, Upgrade”。


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


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


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


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


到此为止可以通信了

第三步数据通信
3.1此阶段可以使用TCP进行通信了,每个包都有一个包头,如:
82、8A、2C、AB、B0、F2为包头,之后为数据需要解码。

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

数据格式:

例如图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个字节,也有可能是其他数字,可以从包总长度减其他计算得来。


3.2通信仲裁:



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


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

效果图:

交流QQ:2396741065
相关资料:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-7-14 15:04:16 | 显示全部楼层
强大呀,楼主

出0入0汤圆

发表于 2014-7-14 15:07:29 | 显示全部楼层
开源啊,楼主

出0入0汤圆

发表于 2014-7-14 15:39:27 | 显示全部楼层
确实不错
过程分析和思路很好
从无到有的过程

出0入0汤圆

发表于 2014-7-14 15:42:59 | 显示全部楼层
我赛,佩服!
可以传输视频吗?

出0入0汤圆

发表于 2014-7-14 15:45:17 | 显示全部楼层
留名先
此贴必火

出0入0汤圆

发表于 2014-7-14 15:45:19 | 显示全部楼层
高手 这都可以

出0入0汤圆

 楼主| 发表于 2014-7-14 15:49:56 | 显示全部楼层
lanfeng0107 发表于 2014-7-14 15:42
我赛,佩服!
可以传输视频吗?

视频一般采用UDP

出0入0汤圆

发表于 2014-7-14 16:08:07 | 显示全部楼层
very good....

出0入0汤圆

发表于 2014-7-14 16:22:06 | 显示全部楼层
这个确实厉害啊!Winshark不是linux的专用利器哦。。。。Pcap

出0入0汤圆

发表于 2014-7-14 16:32:59 来自手机 | 显示全部楼层
lzg1518 发表于 2014-7-14 15:49
视频一般采用UDP

不一定吧

出0入0汤圆

发表于 2014-7-14 16:51:45 | 显示全部楼层
非常强大 非常感谢。

出0入0汤圆

发表于 2014-7-14 16:59:30 | 显示全部楼层

愿闻其详!
我看到淘宝上有卖 stm32视频方案的,不知是怎么实现的!

出0入0汤圆

 楼主| 发表于 2014-7-14 17:21:57 | 显示全部楼层
lanfeng0107 发表于 2014-7-14 16:59
愿闻其详!
我看到淘宝上有卖 stm32视频方案的,不知是怎么实现的!

可以将网络摄像头视频流插入到web页面中,无需stm32传输.

出0入0汤圆

发表于 2014-7-14 17:46:13 | 显示全部楼层
lzg1518 发表于 2014-7-14 17:21
可以将网络摄像头视频流插入到web页面中,无需stm32传输.

之前感觉特别帅,经楼主点拨,受益匪浅!

出0入0汤圆

发表于 2014-7-14 18:38:54 来自手机 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2014-7-14 18:48:53 | 显示全部楼层
很厉害 全部自己实现

出0入0汤圆

发表于 2014-7-14 18:59:59 | 显示全部楼层
双向的意思是浏览器不需要轮训,stm32可以主动发送数据给浏览器而不需要请求

出100入101汤圆

发表于 2014-7-14 19:27:36 | 显示全部楼层
tcpip协议栈用的是?先mark!

出0入0汤圆

 楼主| 发表于 2014-7-14 19:31:34 | 显示全部楼层
gyd0317 发表于 2014-7-14 18:59
双向的意思是浏览器不需要轮训,stm32可以主动发送数据给浏览器而不需要请求 ...

可以主动

出0入0汤圆

发表于 2014-7-14 23:24:21 | 显示全部楼层
lanfeng0107 发表于 2014-7-14 16:59
愿闻其详!
我看到淘宝上有卖 stm32视频方案的,不知是怎么实现的!

我也不知道,我说的不是udp 指的是方案不仅限于 stm32

出0入0汤圆

发表于 2014-7-14 23:36:38 | 显示全部楼层
很有价值啊,谢谢分享

出0入0汤圆

发表于 2014-7-15 00:12:08 | 显示全部楼层

确实不错
过程分析和思路很好
从无到有的过程

出0入0汤圆

发表于 2014-7-15 09:41:31 | 显示全部楼层
q强大,stm32  卡吗

出0入0汤圆

发表于 2014-7-15 10:30:53 | 显示全部楼层
lisgo 发表于 2014-7-14 23:24
我也不知道,我说的不是udp 指的是方案不仅限于 stm32

恩,soga!

出0入0汤圆

发表于 2014-7-15 11:06:22 | 显示全部楼层
这些还没搞懂,还有json、restful,不知道怎么搞。

出0入0汤圆

 楼主| 发表于 2014-7-15 18:42:26 | 显示全部楼层
jomin 发表于 2014-7-15 09:41
q强大,stm32  卡吗

采用二进制传输数据量很小的,5个浏览器同时通信没有发现卡.

出0入0汤圆

发表于 2014-7-15 20:02:25 | 显示全部楼层
楼主网页设计的很炫啊,用什么工具设计的啊

出0入0汤圆

 楼主| 发表于 2014-7-15 20:07:28 | 显示全部楼层
本帖最后由 lzg1518 于 2014-7-15 20:19 编辑
tomyqg 发表于 2014-7-15 20:02
楼主网页设计的很炫啊,用什么工具设计的啊


Dreamweaver 8 设计的,表格是动态生成的

出0入0汤圆

发表于 2014-7-15 21:40:28 来自手机 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2014-7-15 23:43:28 | 显示全部楼层
DW8设计网页,应该是PC是主机了,太晚了,明天看看

出0入0汤圆

发表于 2014-7-16 11:27:28 | 显示全部楼层
楼主发扬论坛精神啊,开源拉!

出0入0汤圆

发表于 2014-7-16 13:20:55 | 显示全部楼层
这个确实很好,谢谢分享

出0入17汤圆

发表于 2014-8-1 20:24:04 | 显示全部楼层
照这个思路,现在市面上的串口转WIFI, 接个单片机也可以搞 Web Server. 同理GPRS也可以,就是外网IP有点麻烦

出0入16汤圆

发表于 2014-8-2 07:46:10 来自手机 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2014-8-2 09:03:17 | 显示全部楼层
我也来学习一下!

出0入0汤圆

发表于 2014-8-2 10:10:33 | 显示全部楼层
Mark                     

出0入168汤圆

发表于 2014-8-2 10:52:57 | 显示全部楼层
顶,开源个DEMO也行啊

出0入0汤圆

发表于 2014-8-2 13:21:11 | 显示全部楼层
着实很强大啊

出0入0汤圆

发表于 2014-8-2 20:11:36 | 显示全部楼层
这个不错,mark

出0入0汤圆

发表于 2014-8-2 23:19:44 | 显示全部楼层
很强大,mark!

出0入0汤圆

发表于 2014-8-3 06:50:51 | 显示全部楼层
很强大,期待楼主上传个工程例子吧!

出0入0汤圆

发表于 2014-8-3 07:03:32 来自手机 | 显示全部楼层
看着很不错,师父把我们领进门吧!

出0入0汤圆

发表于 2014-8-3 07:35:33 | 显示全部楼层
很好 学些了。感谢分享

出0入0汤圆

发表于 2014-8-3 09:24:47 | 显示全部楼层
厉害厉害!!

出0入0汤圆

发表于 2014-8-3 09:33:48 | 显示全部楼层
顶顶         

出0入0汤圆

发表于 2014-8-3 14:41:12 | 显示全部楼层
支持一个。

出0入0汤圆

发表于 2014-8-4 10:51:14 | 显示全部楼层
采用哪个web server?

出0入0汤圆

发表于 2015-1-5 11:54:48 | 显示全部楼层
能发个测试工程更好

出0入0汤圆

发表于 2015-1-5 14:43:34 | 显示全部楼层
楼主现在长沙

出0入0汤圆

发表于 2015-1-5 14:53:51 | 显示全部楼层
不知道性能怎么样。。。

出0入0汤圆

发表于 2015-1-5 17:18:18 | 显示全部楼层
GOOD~~很好!!我想用w5500来实现~~~

出0入0汤圆

发表于 2015-1-5 18:45:00 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2015-1-6 13:27:06 | 显示全部楼层
网页做的比较好看

出0入0汤圆

发表于 2015-1-6 13:34:35 | 显示全部楼层
厉害,学习了

出0入0汤圆

发表于 2015-1-6 13:44:44 | 显示全部楼层
厉害,借鉴!

出0入0汤圆

发表于 2015-1-6 13:47:01 | 显示全部楼层
楼主网页做的很漂亮啊,能共享下源文件吗?谢谢。

出0入0汤圆

发表于 2015-1-6 13:51:04 | 显示全部楼层
网页确实很漂亮

出0入4汤圆

发表于 2015-3-8 16:59:19 | 显示全部楼层
websock中文版资料

出0入0汤圆

发表于 2015-3-9 11:51:40 | 显示全部楼层
点个赞~~stm32 web访问

出0入8汤圆

发表于 2016-12-13 19:07:06 | 显示全部楼层
程序分享下  兄弟

出0入0汤圆

发表于 2016-12-14 01:22:48 | 显示全部楼层
厉害,支持一下

出100入101汤圆

发表于 2016-12-14 08:46:31 | 显示全部楼层
关注下,慢慢看

出0入90汤圆

发表于 2016-12-14 10:12:48 | 显示全部楼层
虽然不知道有啥用途;但是看楼主分析的条理清晰,一步一步的;
应该是讲出来其中的关键了;挺不错的;

出0入0汤圆

发表于 2016-12-15 01:44:04 | 显示全部楼层
关注一下,楼主强大,感谢分享

出0入0汤圆

发表于 2016-12-15 08:14:24 | 显示全部楼层
可惜没有源码!可以给大家参考下么!

出0入8汤圆

发表于 2016-12-15 22:38:04 来自手机 | 显示全部楼层
源大侠分享下

出0入0汤圆

发表于 2016-12-19 18:21:23 | 显示全部楼层
好资料,这是我一直在找的浏览器动态更新数据的资料

出0入0汤圆

发表于 2017-1-9 09:29:35 | 显示全部楼层
楼主能把源码共享一部分么??谢谢了

出0入0汤圆

发表于 2017-1-12 13:41:44 | 显示全部楼层
学习了,很强大

出0入0汤圆

发表于 2017-1-17 18:25:17 | 显示全部楼层
要是能攻克二级IP 就更牛了

出0入50汤圆

发表于 2017-1-19 13:35:25 | 显示全部楼层
先收藏了,改天好好学习研究下

出0入0汤圆

发表于 2017-1-20 11:39:45 | 显示全部楼层
不错,不错,当时我的毕设也是这个,但是只能再局域网中进行,lz要是能连外网就爽了。

出0入0汤圆

发表于 2017-1-20 14:23:28 | 显示全部楼层
stm32 嵌入式与浏览器双向通讯

出0入0汤圆

发表于 2017-7-15 23:00:24 | 显示全部楼层
请问楼主,你这个网页是用什么软件编的, 我现在想做的网页和你这个有点像,我觉得直接用HTML语言写出来太累了

出0入0汤圆

发表于 2018-11-7 17:26:54 | 显示全部楼层
请教楼主 网页面是以站点保存还是以网页保存 谢谢

出0入0汤圆

发表于 2019-1-23 18:10:31 | 显示全部楼层
很有价值啊,谢谢分享

出0入0汤圆

发表于 2019-2-26 13:13:58 | 显示全部楼层
正好用到,谢谢楼主

出0入0汤圆

发表于 2019-2-26 13:37:58 | 显示全部楼层

楼主网页用什么工具设计的啊

出0入0汤圆

发表于 2019-2-26 14:24:46 | 显示全部楼层
强大呀 谢谢楼主

出0入0汤圆

发表于 2019-2-26 14:48:38 | 显示全部楼层
我们在2013年就已经开始使用ipad运行websocket来做智能家居。不过控制的不是单片机,而是AMX和Crestron的控制器。

出0入0汤圆

发表于 2019-2-26 16:30:48 | 显示全部楼层
websocket mark

出100入101汤圆

发表于 2019-2-26 22:47:52 来自手机 | 显示全部楼层
单片机搞协议解析,累

出0入0汤圆

发表于 2019-2-27 08:10:48 | 显示全部楼层
收藏了   

出0入0汤圆

发表于 2020-3-16 09:47:32 | 显示全部楼层
非常好,学习了

出0入0汤圆

发表于 2020-3-16 09:52:34 | 显示全部楼层

非常好,学习了

出0入0汤圆

发表于 2020-3-16 12:33:30 | 显示全部楼层
请问这个 附件咋下载不了。是attch文件

出0入0汤圆

发表于 2020-3-16 16:21:25 | 显示全部楼层
非常好,学习了 websocket

出0入224汤圆

发表于 2020-3-16 19:31:44 来自手机 | 显示全部楼层
jinzhen107 发表于 2020-3-16 12:33
请问这个 附件咋下载不了。是attch文件

下载完后自己改扩展名。

出0入0汤圆

发表于 2020-3-17 19:26:09 | 显示全部楼层
yyts 发表于 2020-3-16 19:31
下载完后自己改扩展名。

谢谢您,         

出0入0汤圆

发表于 2020-3-17 19:32:11 | 显示全部楼层
请问lZ
进行SHA1加密,
再进行Base64编码,  这2个函数是调用的库还是要自己写啊!

出0入0汤圆

发表于 2020-3-21 19:18:12 | 显示全部楼层
mark web..............

出10入95汤圆

发表于 2020-3-21 20:55:23 来自手机 | 显示全部楼层
STM32嵌入式WebSocket   多谢分享!

出0入0汤圆

发表于 2020-3-21 21:55:27 | 显示全部楼层
websocket,谢谢分享

出0入4汤圆

发表于 2020-3-21 23:16:02 | 显示全部楼层
不错,以前有玩过一点点。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表