TSINGSEE青犀视频编译Winsock2 websocket服务端连接异常断开问题排查

本文主要是介绍TSINGSEE青犀视频编译Winsock2 websocket服务端连接异常断开问题排查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

81.png

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

82.png

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

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

83.png

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

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

"HTTP/1.1 101 Switching Protocols\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Accept: " + 此处是进行websocket加密建立连接的数据(握手动作的关键所在) + "\r\n"
"Upgrade: websocket\r\n\r\n"

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

这篇关于TSINGSEE青犀视频编译Winsock2 websocket服务端连接异常断开问题排查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930643

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

Java Exception异常类的继承体系详解

《JavaException异常类的继承体系详解》Java中的异常处理机制分为异常(Exception)和错误(Error)两大类,异常分为编译时异常(CheckedException)和运行时异常... 目录1. 异常类的继承体系2. Error错误3. Exception异常3.1 编译时异常: Che