zoukankan      html  css  js  c++  java
  • TSINGSEE青犀视频编译Winsock2 websocket服务端连接异常断开问题排查

    websocket是独立的、创建在 TCP 上的协议,用户可以扩展协议、实现部分自定义的子协议。我们在编译WebRTC时,采用websocket进行通信,在写Window c++ websocket服务端时,客户端连接出现以下连接信息,但是在客户端测试websocket消息时,控制台不打断户端发出消息。

    在网上查找了一番,原来客户端连接请求发出,websocket服务要通过固定格式再次发给客户端,这样就是代表建立连接成了。

    在服务端启动时,客户端首先发送握手消息请求(请看上图),里面有个最重要的一行信息Sec-WebSocket-Key的数值,但是这个数值是随机生成的。需要对这个信息按照固定方式进行加密然后反馈给客户端。其实就是请求把协议升级到websocket协议,需要同意并按照规矩加密数据传回去。

    服务器返回握手消息给客户端,Sec-WebSocket-Key就是加密后的数据(请看下图),最后websocket需要以 结尾,不然会导致websocket连接断开和接收不到消息。

    最后就是普通的websocket通讯了。唯一不同的是,来的数据使用的掩码处理的,去的时候别用掩码处理。不然这样违反规则websocket会立马断开并报异常,导致连接再次断开。

    我们解决问题的方式是通过字符串拼接,并发送以下信息,这样建立连接成功:

    "HTTP/1.1 101 Switching Protocols "

    "Connection: Upgrade "

    "Sec-WebSocket-Accept: " + 此处是进行websocket加密建立连接的数据(握手动作的关键所在) + " "

    "Upgrade: websocket "

    这样剩下的通信基本和websocket一样,唯一不同的是客户端和服务端都是经过加密的,所以拿到数据要进行解密才能看到具体数据。

  • 相关阅读:
    C段/旁站,子域名爆破的概念
    Linux USB Printer Gadget Driver
    Multifunction Composite Gadget
    PXA2xx SPI on SSP driver HOWTO
    SPI用户空间API
    Linux内核SPI支持概述
    Industrial I/O
    I2C设备驱动程序从用户空间绑定控制(旧内核)
    I2C 10-bit 地址
    Slave I2C
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/14955031.html
Copyright © 2011-2022 走看看