使用c# 的ClientWebSocket通讯时,可能会遇到如下异常:
==============
WebSocket connection error: 缓冲区类型“386”无效。有效的缓冲区类型是:“Close”、“BinaryFragment”、“BinaryMessage”、“UTF8Fragment”、“UTF8Message”。
18:15:48:823 异常:缓冲区类型“386”无效。有效的缓冲区类型是:“Close”、“BinaryFragment”、“BinaryMessage”、“UTF8Fragment”、“UTF8Message”。
===============
由于网上找不到可用方案,完全摸石头过河导致花了一些时间,特此记录:原因是因为WebSocket服务器使用了DEFLATE压缩数据,但也不是对所有数据进行了DEFLATE,服务器又是第三方的。
请教了GPT,给到的回答是:在 .NET 中,ClientWebSocket
类并没有直接提供对 WebSocket 扩展(如 DEFLATE 压缩)的原生支持,并让我手动解码,事实是ClientWebSocket在接收数据时依赖消息类型,遇到无效(压缩过的)的消息自身直接就崩溃终止连接了,意味着我也拿不到原始数据,也就无法解析...
既然知道不支持也就意味着得找个替代方案,一番研究后,我采用了开源库:WebSocketSharp,此时又遇到新问题,连接时握手失败,一番摸索后发现服务器使用了TLS1.3,而我电脑仅支持到TLS1.2,即使设置跳过证书检查也还是握手失败,还好开源项目,有幸顺利找到了解决方案:(注:系统注册表可能需要添加TLS1.3支持)
using WebSocketSharp;
private WebSocket webSocket = null;
private enum SslProtocolsHack
{
Tls = 192,
T