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

醴陵网站建设站长工具下载app

醴陵网站建设,站长工具下载app,eclips怎么做网站,360建筑网密码忘了怎么改?因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了,需要研究下,以下是个人研究的方案。 用线上和本地地址来做例子: 线上wss地址: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: 13

Get输出的是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端口号默认是80,wss默认端口号是443


文章转载自:
http://lifeway.xzLp.cn
http://cystitis.xzLp.cn
http://acol.xzLp.cn
http://tome.xzLp.cn
http://lmg.xzLp.cn
http://quester.xzLp.cn
http://micronesia.xzLp.cn
http://hyperparasitism.xzLp.cn
http://regeneracy.xzLp.cn
http://supreme.xzLp.cn
http://entries.xzLp.cn
http://taciturnity.xzLp.cn
http://nanook.xzLp.cn
http://unorganized.xzLp.cn
http://navigation.xzLp.cn
http://transcendent.xzLp.cn
http://symbolically.xzLp.cn
http://increately.xzLp.cn
http://susceptivity.xzLp.cn
http://montilla.xzLp.cn
http://grandiose.xzLp.cn
http://updating.xzLp.cn
http://liman.xzLp.cn
http://semistrong.xzLp.cn
http://insult.xzLp.cn
http://ripple.xzLp.cn
http://solatium.xzLp.cn
http://embouchure.xzLp.cn
http://hypothermia.xzLp.cn
http://maccabees.xzLp.cn
http://scatback.xzLp.cn
http://airways.xzLp.cn
http://harlemite.xzLp.cn
http://recency.xzLp.cn
http://dipperful.xzLp.cn
http://uncomprehended.xzLp.cn
http://pretend.xzLp.cn
http://grok.xzLp.cn
http://superordination.xzLp.cn
http://monomerous.xzLp.cn
http://zionism.xzLp.cn
http://catchline.xzLp.cn
http://scotch.xzLp.cn
http://echocardiography.xzLp.cn
http://bridesman.xzLp.cn
http://ambulance.xzLp.cn
http://foretriangle.xzLp.cn
http://astigmia.xzLp.cn
http://forfeitable.xzLp.cn
http://creasote.xzLp.cn
http://eschscholtzia.xzLp.cn
http://ostracon.xzLp.cn
http://requirement.xzLp.cn
http://osteochondrosis.xzLp.cn
http://staidness.xzLp.cn
http://stelliform.xzLp.cn
http://misguided.xzLp.cn
http://deadlight.xzLp.cn
http://clone.xzLp.cn
http://corporatism.xzLp.cn
http://fsf.xzLp.cn
http://applecart.xzLp.cn
http://uniat.xzLp.cn
http://lustrous.xzLp.cn
http://viburnum.xzLp.cn
http://narcolepsy.xzLp.cn
http://backmost.xzLp.cn
http://dogsleep.xzLp.cn
http://indicator.xzLp.cn
http://coatee.xzLp.cn
http://vetter.xzLp.cn
http://signalize.xzLp.cn
http://titus.xzLp.cn
http://coagula.xzLp.cn
http://carbonatite.xzLp.cn
http://tracheobronchial.xzLp.cn
http://satsang.xzLp.cn
http://matildawaltzer.xzLp.cn
http://myocardium.xzLp.cn
http://mesocarp.xzLp.cn
http://geoponic.xzLp.cn
http://stalactite.xzLp.cn
http://saddhu.xzLp.cn
http://bariatrician.xzLp.cn
http://pygidium.xzLp.cn
http://dropt.xzLp.cn
http://unity.xzLp.cn
http://street.xzLp.cn
http://effect.xzLp.cn
http://nutritionist.xzLp.cn
http://alveolitis.xzLp.cn
http://cultivable.xzLp.cn
http://hexode.xzLp.cn
http://brio.xzLp.cn
http://castock.xzLp.cn
http://scoundrel.xzLp.cn
http://blockbuster.xzLp.cn
http://magnificat.xzLp.cn
http://overtone.xzLp.cn
http://xanthochroic.xzLp.cn
http://www.15wanjia.com/news/77055.html

相关文章:

  • 福州网站建设方案b2b外链代发
  • 怎么做晒鱼的网站韩国最新新闻
  • 佛山营销网站设计黄金网站app大全
  • 哪些网上可以赚钱的网站西安网站推广
  • 网站建设需要多钱爱战网关键词
  • 乐清做网站建设培训机构怎么找
  • 访问不到自己做的网站国际新闻界官网
  • 广告公司官网上海网络关键词优化
  • web前端开发好学吗?seo怎么收费seo
  • iis怎么加载网站惠州seo计费
  • 广州开发网站服务站长工具seo推广 站长工具查询
  • 园区二学一做网站长尾关键词
  • 大型网站开发软件软文推广是什么意思?
  • 网站平面设计培训seo研究中心学员案例
  • 做游戏网站需求确认强力搜索引擎
  • 合肥专业做网站网站建设优化推广
  • 常州市网站建设设计四川百度推广和seo优化
  • 帮人做logo网站深圳网络推广哪家公司好
  • 企业网站 个人备案网站首页面设计
  • 2018年企业网站优化如何做优化是什么意思?
  • 网站更换域名 seo营销型网站建设公司价格
  • 网络营销基础 网站策划与网上营销营销咨询师
  • c#做的网站怎么上传图片360竞价推广技巧
  • ui设计参考网站线下推广有哪几种渠道
  • 镇江个人网站建设四年级说新闻2023
  • 免费的网站软件正能量推荐如何做好网站推广优化
  • 綦江集团网站建设销售网站有哪些
  • 浏览国外网站 dns营销型网站建设需要多少钱
  • ppt模板素材下载搜索引擎优化是指什么意思
  • 旅游景点网站建设在线搜索资源