亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#的Websocket怎么連接實現wss協議

發布時間:2022-05-25 17:31:46 來源:億速云 閱讀:664 作者:iii 欄目:開發技術

本篇內容主要講解“C#的Websocket怎么連接實現wss協議”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#的Websocket怎么連接實現wss協議”吧!

    一、什么是Websocket?

    1.WebSocket是HTML5下一種新的協議(websocket協議本質上是一個基于tcp的協議)
    2.它實現了瀏覽器與服務器全雙工通信,能更好的節省服務器資源和帶寬并達到實時通訊的目的
    3.Websocket是一個持久化的協議

    二、Websocket、Socket、Http、Mqtt之間的區別?

    Socket:

    Socket是對tcp/ip協議族的封裝的接口,Socket連接可以指定不同的傳輸層協議,即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是一個屬于應用層的,基于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協議

    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協議”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    句容市| 南丹县| 封丘县| 九寨沟县| 巴里| 扎鲁特旗| 二手房| 壤塘县| 横峰县| 八宿县| 无棣县| 磐石市| 黑龙江省| 克拉玛依市| 和政县| 咸宁市| 绥芬河市| 高陵县| 恩施市| 克拉玛依市| 新郑市| 姚安县| 图们市| 屏南县| 泗水县| 洪江市| 开阳县| 玉山县| 余干县| 黄骅市| 石楼县| 阿图什市| 宜川县| 鹤庆县| 鹰潭市| 安丘市| 宁津县| 体育| 聂荣县| 青阳县| 彩票|