WebSocketSharp 是一個 C# 版本的 WebSocket 程式庫,透過少許的語法就能輕易實作跨裝置、平台、軟體的資料傳輸功能。WebSocketSharp 除了能在一般的 C# 專案中使用,也可用於 Unity 開發。
開發環境
於同一解決方案中建立兩個主控台應用程式專案,分別用於開發客戶端與伺服器。
作業系統 | Windows 10 |
開發軟體 | Visual Studio 2022 |
程式語言 | C# |
框架版本 | .NET 6.0 |
專案類型 | 主控台應用程式 |
安裝 NuGet 套件
開啟 工具 > NuGet 套件管理員 > 管理方案的 NuGet 套件 面板,搜尋 WebSocketSharp 套件並安裝。
伺服器架設
基礎語法
首先需建立伺服器處理邏輯運算用的行為類別 (CustomBehavior),繼承 WebSocketBehavior 後,覆寫 OnOpen 與 OnMessage 方法。
1using WebSocketSharp;
2using WebSocketSharp.Server;
3
4namespace TEDLIOU.WebsocketSharp.Example.Server
5{
6 internal class CustomBehavior : WebSocketBehavior
7 {
8 protected override void OnOpen()
9 {
10 // TODO
11 }
12
13 protected override void OnMessage(MessageEventArgs e)
14 {
15 // TODO
16 }
17 }
18}
實體化 WebSocketServer 後,建立路徑與定義其行為類別。
1using WebSocketSharp.Server;
2
3namespace TEDLIOU.WebsocketSharp.Example.Server
4{
5 internal class Program
6 {
7 static void Main(string[] _)
8 {
9 var port = 8080;
10 var path = "/";
11 var wssv = new WebSocketServer(port);
12 wssv.AddWebSocketService<CustomBehavior>(path);
13 wssv.Start();
14
15 Console.ReadLine();
16 }
17 }
18}
接收訊息
於 OnMessage 中讀取輸入的 MessageEventArgs 參數的 Data 即是收到的字串,或讀取 RawData 取得 Byte 陣列。
1protected override void OnMessage(MessageEventArgs e)
2{
3 if (e.IsText)
4 Console.WriteLine(e.Data);
5
6 if (e.IsBinary)
7 Console.WriteLine(e.RawData);
8}
回應訊息
於 CustomBehavior 的 OnMessage 呼叫 Send 以送出回應訊息。需先接收後才能回應,適用於一對一溝通。
1protected override void OnMessage(MessageEventArgs e)
2{
3 Send("Hello World!");
4}
廣播訊息
於 CustomBehavior 的任意位置呼叫 Sessions.Broadcast 以送出廣播訊息。由伺服器主動推送至所有客戶端,適用於一對多溝通,例如:聊天室。
1Sessions.Broadcast("Hello World!");
客戶端連線
基礎語法
以 ws://IP:Port/Path 格式的位址實體化 WebSocket 後,註冊 OnMessage 事件與啟動連線。
1using WebSocketSharp;
2
3namespace TEDLIOU.WebsocketSharp.Example.Client
4{
5 internal class Program
6 {
7 static void Main(string[] _)
8 {
9 var server = "127.0.0.1";
10 var port = 8080;
11 var path = "/";
12 var ws = new WebSocket($"ws://{server}:{port}{path}");
13 ws.OnMessage += OnMessage;
14 ws.Connect();
15
16 Console.ReadLine();
17 }
18
19 static void OnMessage(object? sender, MessageEventArgs e)
20 {
21 // TODO
22 }
23 }
24}
發送訊息
在任何能存取 WebSocket 物件的位置呼叫 Send 方法即可送出訊息。
1ws.Send("Hello World!");
接收訊息
於 OnMessage 中讀取 Data 或 RawData 以接收訊息,用法與伺服器的相同。
1static void OnMessage(object? sender, MessageEventArgs e)
2{
3 if (e.IsText)
4 Console.WriteLine(e.Data);
5
6 if (e.IsBinary)
7 Console.WriteLine(e.RawData);
8}
WebSocketSharp 適用於需於 C# 中實作跨裝置、平台或軟體連線功能的專案,無論是本機、區域或網際網路連線,皆無須煩惱底層的封包傳輸問題,能有效節省開發成本。