webSocket浏览器握手不成功(解决)

简介: websocket与服务端握手会报握手不成功的错误解决方法: 首先是服务端首次收到请求要回报给客户端的报文要做处理多的不说,方法敬上: 1 /// 2 /// 打包请求连接数据 3 /// 4 /// 5 ...

 websocket与服务端握手会报握手不成功的错误解决方法:

首先是服务端首次收到请求要回报给客户端的报文要做处理多的不说,方法敬上:

 1  /// <summary>
 2         /// 打包请求连接数据
 3         /// </summary>
 4         /// <param name="handShakeBytes"></param>
 5         /// <param name="length"></param>
 6         /// <returns></returns>
 7         private byte[] PackageHandShakeData(byte[] handShakeBytes, int length)
 8         {
 9             string handShakeText = Encoding.UTF8.GetString(handShakeBytes, 0, length);
10             string key = string.Empty;
11             Regex reg = new Regex(@"Sec\-WebSocket\-Key:(.*?)\r\n");
12             Match m = reg.Match(handShakeText);
13             if (m.Value != "")
14             {
15                 key = Regex.Replace(m.Value, @"Sec\-WebSocket\-Key:(.*?)\r\n", "$1").Trim();
16             }
17             byte[] secKeyBytes = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
18             string secKey = Convert.ToBase64String(secKeyBytes);
19             var responseBuilder = new StringBuilder();
20             responseBuilder.Append("HTTP/1.1 101 Switching Protocols" + "\r\n");
21             responseBuilder.Append("Upgrade: websocket" + "\r\n");
22             responseBuilder.Append("Connection: Upgrade" + "\r\n");
23             responseBuilder.Append("Sec-WebSocket-Accept: " + secKey + "\r\n\r\n");
24             return Encoding.UTF8.GetBytes(responseBuilder.ToString());
25         }

当连接成功,你会发现客户端可以随意给服务器发送消息,但是服务器给客户端发送消息还是会断开连接这是因为报文的问题:

 1  /// <summary>
 2         /// 把发送给客户端消息打包处理
 3         /// </summary>
 4         /// <returns></returns>
 5         /// <param name="message">Message.</param>
 6         private byte[] SendMsg(string msg)
 7         {
 8             byte[] content = null;
 9             byte[] temp = Encoding.UTF8.GetBytes(msg);
10             if (temp.Length < 126)
11             {
12                 content = new byte[temp.Length + 2];
13                 content[0] = 0x81;
14                 content[1] = (byte)temp.Length;
15                 Buffer.BlockCopy(temp, 0, content, 2, temp.Length);
16             }
17             else if (temp.Length < 0xFFFF)
18             {
19                 content = new byte[temp.Length + 4];
20                 content[0] = 0x81;
21                 content[1] = 126;
22                 content[2] = (byte)(temp.Length & 0xFF);
23                 content[3] = (byte)(temp.Length >> 8 & 0xFF);
24                 Buffer.BlockCopy(temp, 0, content, 4, temp.Length);
25             }
26             return content;
27         }

完成之后就可以畅游通讯了!!

再次声明参考文献:http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html

作者:YanBigFeg —— 颜秉锋

出处:http://www.cnblogs.com/yanbigfeg

本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!

目录
打赏
0
0
0
0
2
分享
相关文章
浏览器节能机制导致Websocket断连的坑
浏览器的节能机制虽然有助于节省系统资源和延长电池寿命,但也可能导致WebSocket连接的不稳定性。通过保持活跃连接、实现自动重连机制和利用 `Page Visibility API`检测页面状态,开发者可以有效应对这些挑战,确保WebSocket连接的稳定性和可靠性。这些措施在实际项目中的应用,可以显著提升WebSocket通信的稳定性,提供更好的用户体验。
64 13
浏览器节能机制导致Websocket断连的坑
浏览器节能机制导致Websocket断连的坑
104 0
记录浏览器节能机制导致Websocket断连问题
近期,在使用WebSocket(WS)连接时遇到了频繁断连的问题,这种情况在单个用户上每天发生数百次。尽管利用了socket.io的自动重连机制能够在断连后迅速恢复连接,但这并不保证每一次重连都能成功接收WS消息。因此,我们进行了一些的排查和测试工作。
558 1
记录浏览器节能机制导致Websocket断连问题
如何让 Websocket兼容低版本浏览器
如何让 Websocket兼容低版本浏览器
322 2
websocket部署后在谷歌内核浏览器异常断开问题
后端springboot前端vue开发的网页,利用websocket实现操作数据库前端网页实时刷新的功能
websocket部署后在谷歌内核浏览器异常断开问题
解决浏览器不兼容websocket
解决浏览器不兼容websocke原文地址thttp://www.bieryun.com/935.html 本例使用tomcat 7.0的websocket做为例子。 1.新建web project。
2924 0
WebSocket兼容到低版本浏览器
就目前而言,WebSocket是最好的Web通信解决方案了。但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案。于是我模拟WebSocket在浏览器上的行为,用AS3写了个兼容的版本。
2616 0
解决浏览器不兼容websocket
本例使用tomcat 7.0的websocket做为例子。 1.新建web project。2.找到tomcat 7.0 lib 下的 catalina.jar,tomcat-coyote.jar添加到项目中.
974 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等