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

银川网站建站公司个人免费网站怎么建设

银川网站建站公司,个人免费网站怎么建设,网站更换服务器,电子商务网站开发的流程因一些特殊原因研究了下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.hkea.cn/news/14412855/

相关文章:

  • 一站式建设网站广告设计有哪些
  • 平台网站建设所需资质中山网站建设 骏域
  • 网站不备案不能访问吗垫江网站建设
  • 模块网站和定制网站区别做蛋糕网站
  • 海口网站建设工作网站开发word文档
  • 网上做任务网站有哪些内容创意个人网页设计
  • seo网站有优化培训班吗网站不备案备案
  • 巩义建设网站seo网站关键词优化机构
  • 网站建设 长期待摊岳阳企业网站定制开发
  • 泰安做网站公司哪家好青岛响应式网站设计
  • 可以直接做海报的网站大连有做途家网站吗
  • 哪个网站做照片书最好免费网站模版下载
  • 换模板搭建网站怎么做wordpress小程序
  • 沈阳网站制作全过程百度指数工具
  • 如何查看网站模板潍坊网站建设电话
  • 做设计开店的网站腾讯云免费网站建设
  • 网站制作便宜wordpress 自适应菜单
  • 网站傻瓜式建设优秀网站特点
  • 办公设备网站推广怎么做免费推广网站2024
  • 做视频网站用什么格式百度关键词排名代发
  • 天水网站建设博客站的免费网站
  • 双井网站建设中学生怎么做网站
  • 手机网站商城建设答辩网站建立的优劣势
  • 高新区微网站建设上海如何批量建站
  • wordpress全站静太化同城app开发多少钱
  • 做一样的模板网站会被告侵权吗男人的好看网
  • 网站建设方案的含义新手做视频网站好
  • ps可以做网站吗网页模板网站cms
  • 一个设计网站多少钱二级域名出租
  • 建设网站是做手机版好还是pc版好网站流量做那些好