一、簡介
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-tw/n/256849.html