目录
一、Websocket是什么?二、Websocket、socket、Http、Mqtt的区别?Socket: WebSocket: MQTT: http: IIIWS和WSS协议一、什么是Websocket?
1.websocket是HTML5的下一个新协议(websocket本质上是一个基于tcp的协议) 2.实现了浏览器与服务器的全双工通信,可以节省服务器资源和带宽,达到实时通信的目的 3.Websocket是一个持久的协议二、Websocket、Socket、Http、Mqtt之间的区别?
Socket:
套接字是封装tcp/ip协议族的接口套接字连接可以指定不同的传输层协议,即TCP或UDP因为它是基于tcp/ip的,所以一般用于局域网内的通信WebSocket:
WebSocket协议是一种基于TCP的新型网络协议,和http协议一样属于应用层协议它是一种实现客户端和服务器之间双向实时通信(全双工)的技术,支持长连接,可以通过互联网相互通信Ws和wss分别代表明文和密文的websocket协议,默认端口是80或者443,和http差不多WebSocket还需要一个握手过程,才能正式发送和接收数据由于包头协议比较小,不像http每次请求都需要携带一个完整的头,网络开销相对较低,而且由于连接长,延迟明显较少(不需要反复建立新的连接)MQTT:
MQTT协议是为大量远程传感器和控制设备之间的通信而设计的,这些设备具有有限的计算能力,并且工作在低带宽和不可靠的网络中它有以下主要特点: 1.使用发布/订阅消息模式提供一对多的消息发布和解耦应用程序; 2.有效载荷内容屏蔽的消息传输; 3.使用TCP/IP提供网络连接;HTTP:
HTTP属于应用层,传输数据(HTML文件、图片文件、查询结果等)基于TCP/IP通信协议 通信模式: 1.浏览器作为HTTP客户端,通过URL向HTTP服务器即WEB服务器发送请求根据接收到的请求,Web服务器向客户端发送响应信息 2.HTTP请求消息请求:请求行、请求头、空行和请求数据 3.HTTP响应消息响应:HTTP响应也由四部分组成,分别是:状态行、消息头、空行和响应体 如果连接方式为关闭,服务器会主动关闭TCP连接,客户端会被动关闭连接并释放TCP连接;如果连接模式是keepalive,连接会保持一段时间,在这段时间内你可以继续接收请求;三、WS和WSS协议
WS协议和WSS协议都是WebSocket协议的SCHEM,一个是不安全的,一个是安全的它也是一个统一的资源标识符就像HTTP协议和HTTPS协议的区别一样非安全没有证书,安全需要SSL证书(SSL是Netscape开发的,用于确保网络中数据传输的安全性它主要利用数据加密技术,防止数据在传输过程中被窃取或监控)其中WSS代表TLS上的WebSocket一般WS默认端口80,WSS默认端口443大多数网站使用80端口和433端口(高安全性过程中,80和433端口的网站需要备案后才能访问中国当然,网站还会有其他端口如果做高安全性,可以用海外高安全性WS和WSS分别在TCP WS中体现为WS,TCP TLS WS中体现为WS网址就是URL最后说一下WebSocket协议的特点:基于TCP协议,服务器易于实现;对HTTP协议兼容性好,握手时不容易被屏蔽可以通过各种HTTP代理服务器访问;轻量级数据和实时通信;您可以发送文本和二进制数据同一个源不受限制,客户端可以和任何服务器通信所以WebSocket协议的出现,解决了很多人对扩展和兼容协议的担忧 Wss连接:WSS是基于SSL的,所以需要双向验证当客户端连接到服务器时,我需要添加一个证书(服务器不验证不能添加),服务器会验证注意:客户还需要验证服务器,所以需要添加服务器证书回调进行验证很多人都忽略了这一点,所以会有一个提示,提示他们无法连接到远程服务器,TLS/SSL验证失败 公共主窗口() { initialize component(); RemoteCertificateValidationCallback remote=ValidateServerCertificate; ServicePointManagerServerCertificateValidationCallback=remote; } ///摘要 ///服务器端验证 ////摘要 ///param name='sender'/param ///param name=' certificate '/param ///param name='chain'/param ///param name=' sslPolicyErrors '/param ///返回/返回 public bool ValidateServerCertificate(对象发送方,X509Certificate证书,X509Chain链,SslPolicyErrors sslPolicyErrors) { 返回true } ///摘要 ///WebSocket客户端连接 ////摘要 ///param name='param'/param ///返回/返回 公共异步任务连接() { CancellationTokenSource t=new CancellationTokenSource(); 尝试 { 客户Options.SetRequestHeader('key ',' value '); x509 certificate 2 cert=new x509 certificate 2(' XXX . cert '); 客户options . client certificates . add(cert); Uri uri=新Uri('wss://xxxxxx’);
//var config=new ServerConfig
等待客户。ConnectAsync(uri,t . Token);
线程。睡眠(300);
控制台。WriteLine($ '链接web socket:[{ uri }]done ');
Task s1=新任务(Receive,t,t.Token,TaskCreationOptions。long running);
s1。start();
token=t;
控制台。WriteLine('发送你好');
}
catch(例外ex)
{
控制台。WriteLine($ '无法链接websocket:[{uri}]',例如。消息);
}
}
///摘要
///Websocket接收
////摘要
///param name='obj'/param
私有void接收(对象对象)
{
CancellationTokenSource ts=obj as CancellationTokenSource;
byte[] bs=新字节[1024];
而(!ts。Token.IsCancellationRequested)
{
尝试
{
ArraySegmentbyte buff=new ArraySegmentbyte(bs,0,bs。长度);
TaskWebSocketReceiveResult RES=client .接收异步(缓冲区,ts .token);
RES . Wait();
如果(ts .令牌。IsCancellationRequested)
{
返回;
}
if (WebSocketCloseStatus .正常闭合==研究结果。closestatus)
{
控制台WriteLine($'websocket:与服务器断开链接:{研究结果。desc:{ RES . result }。closestatusdescription } ');
ts .cancel();
返回;
}
string strData=encod .GetString(bs,0,RES . result。计数);
控制台WriteLine(strData);
WsMsg msg=WsMsg .反序列化(strData);
}
接住(例外ex)
{
控制台WriteLine('解析或执行websocket:命令失败,ex);
}
}
}
Websocket客户端与服务端通信代码参考文章:
WebSocket协议:5分钟从入门到精通-程序猿小卡https://www.cnblogs.com/chyingp/p/websocket-deep-in.html
C# WebSocket_熊思雨的博客https://blog.csdn.net/qq_38693757/article/details/114933642
C# WebSocket -南国叶子https://www.cnblogs.com/nanguoyezi/p/9351555.html
到此这篇关于C# Websocket连接实现wss协议的文章就介绍到这了,更多相关C# Websocket连接wss内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。