当前位置: 首页 > news >正文

河北省建设工程造价管理协会网站wordpress the_category()

河北省建设工程造价管理协会网站,wordpress the_category(),杭州建网站哪家口碑好,东莞做网站-南城信科因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了#xff0c;需要研究下#xff0c;以下是个人研究的方案。 用线上和本地地址来做例子#xff1a; 线上wss地址#xff1a;wss://server.cs.com/cs/vido/1 本地地址ws://127…因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了需要研究下以下是个人研究的方案。 用线上和本地地址来做例子 线上wss地址wss://server.cs.com/cs/vido/1 本地地址ws://127.0.0.1/cs/vido/1 如果用本地地址来模拟websocket需要遵从websocket协议。WebSocket协议需要通过已建立的TCP连接来传输数据。具体实现上是通过http协议建立通道然后在此基础上用真正的WebSocket协议进行通信所以WebSocket协议和http协议是有一定的交叉关系的。 在tcp与websocket消息交互之前需要先和websocket建立握手关系 GET /cs/vido HTTP/1.1 Host: server.cs.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw Sec-WebSocket-Version: 13Get输出的是ws后面的子路径地址 Host输出的是域名地址 upgrade、Connection输出的是要升级到websocket通讯 Sec-WebSocket-Key输出的是Base64 encode 的值这个是随机生成的。 Sec-WebSocket-Version输出的是websocket的版本默认必须是13 websocket服务器收到客户端消息后会返回验证消息 HTTP/1.1 101 Connection: upgrade Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Upgrade: websocket Sec-WebSocket-Accept: sT7MD7zMs7k3yPTFV6JvttwPwoE 客户端接收到服务端发送的新的Sec-WebSocket-Accept参数后使用原来的随机密钥和新的Sec-WebSocket-Accept参数共同生成一个新的Sec-WebSocket-Key参数用于加密数据传输。 客户端将新的Sec-WebSocket-Key参数发送给服务端服务端接收到后使用该参数加密数据传输收到此消息后是代表已经和websocket建立了联系。 这块要注意下如果是用本地地址去测试没问题但用正式地址去测试就会被提示需要ssl加密。 使用ssl加密代码如下 _tcpClient new TcpClient(host, port);_networkStream _tcpClient.GetStream();// 创建SslStreamSslStream sslStream new SslStream(_networkStream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);// 验证服务器证书sslStream.AuthenticateAsClient(host);// 验证服务器证书的回调函数public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors){if (sslPolicyErrors SslPolicyErrors.None)return true;Console.WriteLine(Certificate error: {0}, sslPolicyErrors);return false;} 用了ssl加密和没用ssl加密的获取的消息也是不一样的如果用了ssl加密后就要用sslStream来接收消息或者发送消息否则会乱码。没有用ssl加密那就用_networkStream来接收或者发送消息。 整体代码如下 public class WebSocketClient2{private TcpClient _tcpClient;private NetworkStream _networkStream;public void ConnectToWebSocket(string host, int port, string resource){_tcpClient new TcpClient(host, port);_networkStream _tcpClient.GetStream();// 创建SslStreamSslStream sslStream new SslStream(_networkStream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);// 验证服务器证书sslStream.AuthenticateAsClient(host);// 构建WebSocket握手消息string key Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));string handshakeMessage $GET {resource} HTTP/1.1\r\n $Host:{host}\r\n Upgrade: websocket\r\n Connection: Upgrade\r\n $Sec-WebSocket-Key: {key}\r\n Sec-WebSocket-Version: 13\r\n \r\n;// 发送握手消息byte[] handshakeBuffer Encoding.UTF8.GetBytes(handshakeMessage);//_networkStream.Write(handshakeBuffer, 0, handshakeBuffer.Length);sslStream.Write(handshakeBuffer, 0, handshakeBuffer.Length);// 接收服务器响应并验证byte[] buffer new byte[1024];//int bytesRead _networkStream.Read(buffer, 0, buffer.Length);int bytesRead sslStream.Read(buffer, 0, buffer.Length);string response Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(response);// 验证服务器响应的Sec-WebSocket-Acceptstring expectedResponse Convert.ToBase64String(SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key 258EAFA5-E914-47DA-95CA-C5AB0DC85B11)));if (response.Contains($Sec-WebSocket-Accept: {expectedResponse})){Console.WriteLine(WebSocket handshake successful.);}else{Console.WriteLine(WebSocket handshake failed.);}byte[] buffer2 new byte[1024];int bytesRead2;while ((bytesRead2 sslStream.Read(buffer2, 0, buffer2.Length)) 0){string message Encoding.UTF8.GetString(buffer2, 0, bytesRead2);// 解析WebSocket消息// ...Console.WriteLine($Received message: {message});}}// 验证服务器证书的回调函数public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors){if (sslPolicyErrors SslPolicyErrors.None)return true;Console.WriteLine(Certificate error: {0}, sslPolicyErrors);return false;}}//代码实现调用WebSocketClient2 client new WebSocketClient2();client.ConnectToWebSocket(server.cs.com.cn, 443, /cs/vido/1);//测试环境ws端口号默认是80wss默认端口号是443
http://www.w-s-a.com/news/731268/

相关文章:

  • 金站网.营销型网站学校安全教育网站建设
  • 临沂市建设局网站公示军事新闻头条2023
  • 购物网网站建设lamp 做网站
  • 做网站网站庄家html5网站开发技术
  • 无锡门户网站制作电话广告设计公司的未来
  • 白云区专业网站建设网页设计模拟试题答案
  • 毕业设计网站代做多少钱制作旅游网站设计概述
  • 网站开发维护运维无人在线电视剧免费观看
  • 电子商务网站建设开题报告展馆网站建设
  • 门户网站建设的背景和意义手机网站前
  • 国内免费视频素材无水印素材网站国家最新消息
  • 襄阳seo站内优化学做网站论坛教程
  • 文明网站建设情况报告wordpress伪静态配置
  • 牙科网站模板个人微信网站建设
  • 厦门公司注册网站dw做简单小说网站
  • 网站建好以后每年都续费么wordpress 仿聚划算
  • 单位网站建设收费标准网上开店铺需要多少钱
  • 灯饰网站需要这么做申请域名的流程
  • 软件下载网站怎么赚钱wordpress减少数据库查询
  • 什么兼职网站可以做视频剪辑常见的推广平台有哪些
  • 网站开发是用html还是jsp设迹官网
  • 查公司信息的网站怎么学wordpress
  • 白银做网站长春一般建一个网站需要多少钱
  • 帮人做钓鱼网站的人网络推广培训职业学校
  • 淘宝客有必须做网站吗网站开发的形式有( )
  • 网站建设:上海珍岛网页版qq空间登录
  • 网站服务器ipteahouse wordpress主题
  • 深州市住房保障和城乡建设局网站做网站公司叫什么
  • 织梦网站转跳手机站注册公司代理记账费用
  • wordpress建站Pdf亚马逊aws在线观看