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