您好,登錄后才能下訂單哦!
本篇內容主要講解“C#的Websocket怎么連接實現wss協議”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#的Websocket怎么連接實現wss協議”吧!
1.WebSocket是HTML5下一種新的協議(websocket協議本質上是一個基于tcp的協議)
2.它實現了瀏覽器與服務器全雙工通信,能更好的節省服務器資源和帶寬并達到實時通訊的目的
3.Websocket是一個持久化的協議
Socket是對tcp/ip協議族的封裝的接口,Socket連接可以指定不同的傳輸層協議,即TCP或UDP,由于它是基于tcp/ip的,所以一般用在局域網內通信。
WebSocket協議是基于TCP的一種新的網絡協議,和http協議一樣屬于應用層協議,是一種讓客戶端和服務器之間能進行雙向實時通信(全雙工)的技術,且支持長連接,可以進行互聯網間通信。引入ws和wss分別代表明文和密文的websocket協議,且默認端口使用80或443,幾乎與http一致,WebSocket也要有一個握手過程,然后才能正式收發數據,由于數據包頭部協議較小,不同于http每次請求需要攜帶完整的頭部,所以網絡開銷比較少,長連接也讓延遲明顯更少(不需要重復新建連接)。
MQTT協議是為大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:
1.使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合;
2.對負載內容屏蔽的消息傳輸;
3.使用 TCP/IP 提供網絡連接;
HTTP是一個屬于應用層的,基于TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
通信方式:
1.瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送請求。Web服務器根據接收到的請求后,向客戶端發送響應信息。
2.HTTP之請求消息Request:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
3.HTTP之響應消息Response:HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
若connection 模式為close,則服務器會主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;
WS協議和WSS協議兩個均是WebSocket協議的SCHEM,兩者一個是非安全的,一個是安全的。也是統一的資源標志符。就好比HTTP協議和HTTPS協議的差別。非安全的沒有證書,安全的需要SSL證書。(SSL是Netscape所研發,用來保障網絡中數據傳輸的安全性,主要是運用數據加密的技術,能夠避免數據在傳輸過程被不被竊取或者監聽。)其中WSS表示在TLS之上的WebSocket。WS一般默認是80端口,而WSS默認是443端口,大多數網站用的就是80和433端口。(在高防防護過程中,80和433端口的網站是需要備案才可以接入國內的。)當然網站也會有別的端口,這種如果做高防是方案是可以用海外高防的。WS和WSS的體現形式分別是TCP+WS AS WS ,TCP+TLS+WS AS WS。服務器網址就是 URL。最后墨者安全再說下WebSocket協議的特點:建立在 TCP 協議之上,服務端實現容易;與 HTTP 協議有良好的兼容性,握手時不容易被屏蔽,可以通過各種 HTTP 代理服務器;數據輕量,實時通訊;可以發送文本和二進制數據。不限制同源,客戶端可以與任意服務器端進行通訊。因此WebSocket協議的出現,為很多人解決了關于擴展以及兼容性協議的煩惱問題。
WSS連接:由于wss是基于SSL,所以需要進行雙向驗證,客戶端連接服務端時,我需要添加證書(服務端不驗證可以不添加),服務端進行驗證。注意:客戶也需要對服務端進行驗證,所以需要添加服務端證書回調,進行驗證,這是很多人忽視,所以出現無法連接遠程服務器,TLS/SSL驗證失敗的提示。
public MainWindow() { InitializeComponent(); RemoteCertificateValidationCallback remote = ValidateServerCertificate; ServicePointManager.ServerCertificateValidationCallback = remote; } /// <summary> /// 服務端驗證 /// </summary> /// <param name="sender"></param> /// <param name="certificate"></param> /// <param name="chain"></param> /// <param name="sslPolicyErrors"></param> /// <returns></returns> public bool ValidateServerCertificate( object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors) { return true ; } /// <summary> /// WebSocket客戶端連接 /// </summary> /// <param name="param"></param> /// <returns></returns> public async Task Connect() { CancellationTokenSource t = new CancellationTokenSource(); try { client.Options.SetRequestHeader("key", "value"); X509Certificate2 cert = new X509Certificate2("xxx.cert"); client.Options.ClientCertificates.Add(cert); Uri uri = new Uri("wss://xxxxxx"); //var config=new ServerConfig await client.ConnectAsync(uri, t.Token); Thread.Sleep(300); Console.WriteLine($"鏈接websocket:[{uri}] 完成"); Task s1 = new Task(Receive, t, t.Token, TaskCreationOptions.LongRunning); s1.Start(); token = t; Console.WriteLine("Send Hello"); } catch (Exception ex) { Console.WriteLine($"鏈接websocket:[{uri}] 失敗", ex.Message); } } /// <summary> /// Websocket接收 /// </summary> /// <param name="obj"></param> private void Receive(object obj) { CancellationTokenSource ts = obj as CancellationTokenSource; byte[] bs = new byte[1024]; while (!ts.Token.IsCancellationRequested) { try { ArraySegment<byte> buff = new ArraySegment<byte>(bs, 0, bs.Length); Task<WebSocketReceiveResult> res = client.ReceiveAsync(buff, ts.Token); res.Wait(); if (ts.Token.IsCancellationRequested) { return; } if (WebSocketCloseStatus.NormalClosure == res.Result.CloseStatus) { Console.WriteLine($"websocket:與服務器斷開鏈接:{res.Result.CloseStatus} --> Desc :{res.Result.CloseStatusDescription}"); ts.Cancel(); return; } string strData = encod.GetString(bs, 0, res.Result.Count); Console.WriteLine(strData); WsMsg msg = WsMsg.Deserialize(strData); } catch (Exception ex) { Console.WriteLine("解析或執行 websocket:命令失敗", ex); } } }
到此,相信大家對“C#的Websocket怎么連接實現wss協議”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。