webSocket浏览器握手不成功(解决)
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
本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!
webSocket浏览器握手不成功(解决)相关推荐
- 成功解决~请使用IE浏览器(兼容模式)
成功解决~请使用IE浏览器(兼容模式) 目录 解决问题 解决思路 解决方法 1.图文教程 解决问题 请使用IE浏览器(兼容模式) 解决思路 有些网站版本比较旧,所以新的浏览器不能兼容,需要调低或者选择 ...
- apache 配置 wss websocket打开握手超时_「Web应用架构」WebSocket介绍和WebSocket API
WebSocket支持在客户端和服务器之间双向的.面向消息的文本和二进制数据流.它是浏览器中最接近原始网络套接字的API.除了WebSocket连接也不仅仅是一个网络套接字,因为浏览器在一个简单的AP ...
- 内网PC通过NAT server公网地址访问内部服务器时TCP三次握手不成功
公网地址访问内部服务器时TCP三次握手不成功 一. 背景 在上图所示的网络中,PC 及Server属不同LAN,都是zone trust.为了让Internet用户能够访问到Server,FW上 ...
- Eclipse 内部启动 Tomcat,浏览器访问出错的解决方法
Eclipse 内部启动 Tomcat,浏览器访问出错的解决方法 在Eclipse里面配置好Tomcat服务器后,start server成功后,在浏览器输入http://localhost:8080 ...
- 使用python中py2neo包连接neo4j(安装,连接,成功解决)
使用python中py2neo包连接neo4j neo4j下载 JDK下载 neo4j官网下载 检查安装是否成功 py2neo安装 命令行安装 测试安装是否成功 最近在研究有关知识图谱的任务,选择用图 ...
- Ie默认HTML主页发现异常,IE浏览器总是出错 怎么解决ie问题
IE浏览器总是出错怎么解决ie问题 点击"开始-设置-控制面板-添加/删除程序",在列表中选择"Microsoft Interneet Explore",接着点 ...
- edge浏览器受信任_Win10解决浏览器被强制默认为Edge的两种方法
Windows10- 14986版系统强制默认浏览器为Microsoft Edge,在系统设置 - 系统 - 默认应用中,无论如何更改均无效. 如何更改Windows10- 14986版系统的Web浏 ...
- 电脑无法联网或者edge浏览器无法上网的解决办法
前言 本人有幸经历了三次电脑无法上网,只能说修的时候长路漫漫,于是痛定思痛,亡羊补牢,现在决心把它们都记录下来.一般情况:电脑无法联网的常见情况有以下几种: 网络故障:包括路由器.调制解调器或网络设备 ...
- 浏览器主页锁定的解决方法
文章目录 前言 锁定网址 解除锁定 一.关闭浏览器保护功能 二.关闭新建标签页设置 写在最后 前言 当我们设置浏览器主页后,有时打开浏览器会自动跳转到另一个网址,而非自己设置的主页地址.有时是因为安装 ...
最新文章
- C语言实现九九乘法表共9行9列,重点考察for循环的掌握情况!
- 在vscode中使用pylint-django插件解决pylint的一些不必要的错误提示【转】
- 为私有Kubernetes集群创建LoadBalancer服务
- 库函数strlen源码重现及注意问题
- 网站建设全阶段培养共分三期
- php 方法求 的近似值,PHP中的等角近似
- 部署并使用Docker(Alibaba Cloud Linux 2)
- 关于GIT的SSH加密问题
- SIFT四部曲之——高斯滤波
- pyotherside 试用
- 一些不为人知的秘密[迅雷和快播]
- html+css个人简历/网页界面
- 戴尔笔记本电脑光驱装固态,并设置为系统盘教程
- iReport下载安装配置及编译
- 计算机系统安全启动,怎么关闭安全启动_关闭bios安全启动的方法图文步骤
- 荧光量子产率计算机模拟,如何提高荧光染料的量子产率,或许可以从这里找到答案...
- centos 6.2 安装intel 显卡驱动
- 最新的AS下载地址,更新及时
- 电脑c语言小游戏,C语言中的一个小游戏的排行榜系统...
- MySQL Windows安装教程