无法将客户端服务器与Websockets连接

问题描述

我使用Tcp-Listner Tcp-Client连接在C#.Net Framework上创建简单的Web服务器。

现在我正在尝试为聊天\或其他功能提供Websocket连接的支持。

对于套接字,请使用GenericHandler和js进行连接。得到客户的请求后

GET /socket/SocketHandler.ashx HTTP/1.1
Host: ***************
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36
Upgrade: websocket
Origin: http://************
Sec-WebSocket-Version: 13
Accept-Encoding: gzip,deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Sec-WebSocket-Key: aroK0T3g3A6oSxC6Qz1QDg==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

使用连接键 aroK0T3g3A6oSxC6Qz1QDg == 从服务器向客户端发送响应,将其SHA1哈希并转换为Base64格式以获取接受键 zGccDw / PeOtlWAmdPT6HBtyywYc =

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: zGccDw/PeOtlWAmdPT6HBtyywYc=
Sec-WebSocket-Protocol: chat

但是之后,客户(浏览器)说

失败:WebSocket握手期间错误:不正确 “ Sec-WebSocket-Accept”标头值

那么,什么是即时消息做错了以及如何解决?

upd:例如,我使用此代码进行转换

string ClientKey = socketKey;
            string GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
            var conc = ClientKey + GUID;
            var buffer = Encoding.UTF8.GetBytes(conc);
            var hash1 = SHA1.Create().ComputeHash(buffer);
            var AcceptKey = System.Convert.ToBase64String(hash1);

解决方法

我在C#中也有自己的WebSocket客户端。并且它已经过测试并且可以与ASP.NET Core一起使用。

然后,我测试了您的安全密钥,结果有所不同。我低于哈希值。

QCd+628gwEVYxyYQ8ekJny8ZHCo=

这是我的安全密钥生成部分。

const string handshakeMagic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
string handshakeSecureKey = "aroK0T3g3A6oSxC6Qz1QDg==";
string handshakeResponseKey;
using (SHA1Managed sha1 = new SHA1Managed())
{
    byte[] handshakeResponseBytes = Encoding.ASCII.GetBytes(handshakeSecureKey + handshakeMagic);
    byte[] sha1Bytes = sha1.ComputeHash(handshakeResponseBytes);
    handshakeResponseKey = Convert.ToBase64String(sha1Bytes);
}
Console.WriteLine(handshakeResponseKey);

与您的几乎一样。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...