C# WebSocket客戶端詳解

一、簡介

WebSocket是一種全雙工通信協議,與HTTP協議不同,WebSocket在建立連接後,客戶端與服務器端可以互相發送數據,而不需要像HTTP協議那樣每次請求都需要建立新的連接。

C#是一種面向對象的編程語言,由Microsoft公司開發,它與.NET框架緊密結合,可以用來開發Windows桌面程序、Web應用程序、移動應用程序等。

這篇文章將從C# WebSocket客戶端的使用角度對WebSocket協議進行詳細的闡述,包括C# WebSocket客戶端的使用方法、注意事項、相關實例操作等。

二、使用C# WebSocket客戶端

1、引用依賴

在使用C# WebSocket客戶端時,需要引入System.Net.WebSockets命名空間,如下代碼所示:


using System.Net.WebSockets;

2、創建WebSocket客戶端實例

要使用C# WebSocket客戶端,首先需要創建一個WebSocket客戶端實例,可以使用.NET框架提供的WebSocket類的構造函數來實現:


WebSocket ws = new WebSocket(new Uri("wss://www.example.com"));

這裡將WebSocket客戶端實例化,調用前需要傳入服務端的鏈接地址,支持wss和ws兩種協議,如果鏈接成功後,可以進行如下操作。

3、WebSocket客戶端事件

WebSocket客戶端在與服務端進行通信的過程中,會觸發一些事件,包括連接建立、消息發送、接收消息等,開發者可以通過WebSocket類提供的事件進行監聽並進行相應的處理, WebSocket類常用的事件如下:

(1)連接建立事件

WebSocket客戶端在建立連接後,會觸發ConnectionOpened事件,我們可以在事件處理程序中進行相關的邏輯處理。


ws.ConnectionOpened += (sender, e) => {
    // WebSocket客戶端已經連接成功
};

(2)關閉連接事件

當WebSocket客戶端接收到服務端發送的關閉指令時,會觸發ConnectionClosed事件。


ws.ConnectionClosed += (sender, e) => {
    // 連接已經關閉
};

(3)消息發送事件

當WebSocket客戶端發送消息時,會觸發MessageSent事件。


ws.MessageSent += (sender, e) => {
    // 消息已經發送成功
};

(4)接收到消息事件

當WebSocket客戶端接收到服務端發送的消息時,會觸發MessageReceived事件。


ws.MessageReceived += (sender, e) => {
    // 接收到來自服務端的消息
};

4、WebSocket客戶端的發送和接收數據

通過WebSocket客戶端可以向服務端發送數據,也可以接收服務端發送的數據,可以通過SendAsync和ReceiveAsync兩個方法實現,如下代碼所示:


ArraySegment<byte> buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes("Hello World"));
await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

ArraySegment<byte> receiveBuffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult receiveResult = await client.ReceiveAsync(receiveBuffer, CancellationToken.None);
string receivedMessage = Encoding.UTF8.GetString(receiveBuffer.Array, 0, receiveResult.Count);

三、注意事項

1、WebSocket客戶端的鏈接地址必須為wss或ws協議開頭

WebSocket客戶端的鏈接地址必須為wss或ws協議開頭,否則無法建立連接。

2、WebSocket客戶端的超時設置

在C# WebSocket客戶端中,可以通過WebSocket類提供的Options屬性對超時進行設置,其中包括KeepAliveInterval、ReceiveBufferSize、SendBufferSize等,這裡以KeepAliveInterval為例進行說明:


ws.Options.KeepAliveInterval = TimeSpan.FromSeconds(10);

3、WebSocket客戶端的關閉操作

在C# WebSocket客戶端中,可以通過CloseAsync方法來關閉WebSocket客戶端。


await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Connection closed", CancellationToken.None);

四、實例操作

1、創建WebSocket客戶端實例

下面是創建WebSocket客戶端實例的完整代碼示例:


using System.Net.WebSockets;

WebSocket ws = new WebSocket(new Uri("wss://www.example.com"));

ws.ConnectionOpened += (sender, e) => {
    // WebSocket客戶端已經連接成功
};

ws.ConnectionClosed += (sender, e) => {
    // 連接已經關閉
};

ws.MessageSent += (sender, e) => {
    // 消息已經發送成功
};

ws.MessageReceived += (sender, e) => {
    // 接收到來自服務端的消息
};

await ws.ConnectAsync();

ArraySegment<byte> buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes("Hello World"));
await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

ArraySegment<byte> receiveBuffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult receiveResult = await client.ReceiveAsync(receiveBuffer, CancellationToken.None);
string receivedMessage = Encoding.UTF8.GetString(receiveBuffer.Array, 0, receiveResult.Count);

await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Connection closed", CancellationToken.None);

2、設置WebSocket客戶端的超時時間

下面是設置WebSocket客戶端的超時時間的完整代碼示例:


using System.Net.WebSockets;

WebSocket ws = new WebSocket(new Uri("wss://www.example.com"));

ws.Options.KeepAliveInterval = TimeSpan.FromSeconds(10);

await ws.ConnectAsync();

ArraySegment<byte> buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes("Hello World"));
await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

ArraySegment<byte> receiveBuffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult receiveResult = await client.ReceiveAsync(receiveBuffer, CancellationToken.None);
string receivedMessage = Encoding.UTF8.GetString(receiveBuffer.Array, 0, receiveResult.Count);

await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Connection closed", CancellationToken.None);

總結

本文從C# WebSocket客戶端的使用角度對WebSocket協議進行了詳細的闡述。在實際開發中,開發者需要根據自己的實際需求來選擇適合自己的WebSocket客戶端實現方式,並且需要注意一些常見問題,如鏈接地址、超時設置、關閉操作等。希望本文可以對大家在使用C# WebSocket客戶端時有所幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/256849.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:42
下一篇 2024-12-15 12:42

相關推薦

  • Python調用crt telnet客戶端的實現

    本篇文章將詳細介紹如何使用Python調用crt telnet客戶端。我們將從以下幾個方面進行闡述: 一、安裝crt telnet客戶端 首先,我們需要下載並安裝crt telne…

    編程 2025-04-28
  • 跨域通信浮標——實現客戶端之間的跨域通信

    本文將介紹跨域通信浮標的使用方法,該浮標可以實現客戶端之間的跨域通信,解決了瀏覽器同源策略的限制,讓開發者能夠更加方便地進行跨域通信。 一、浮標的原理 跨域通信浮標的原理是基於浮動…

    編程 2025-04-27
  • Python服務器客戶端

    本文將從以下幾個方面對Python服務器客戶端進行詳細闡述:socket編程、HTTP協議、Web框架、異步IO。 一、socket編程 Python的socket模塊是為網絡編程…

    編程 2025-04-27
  • C# Socket關閉後客戶端仍可連接的解決方法

    對於C# Socket通信中的一些問題,多數人可能已經熟知,但是有些問題仍然困擾着一部分人,例如Socket關閉後,客戶端仍然可以連接。本篇文章將在此問題為中心,圍繞該問題的原因和…

    編程 2025-04-27
  • Boost Websocket Send用法介紹

    本文將詳細闡述Boost Websocket Send的相關內容,包括Boost Websocket Send的概念、使用方法、功能特點等,以便讀者深入了解和使用。 一、概述 Bo…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論