- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式WebSocket的实现.pdf
嵌入式WebSocket 的实现
系统硬件采用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:610534677
文档评论(0)