Ⅰ. はじめに
タイトルの通り「C#でWebSocketサーバを建てる方法」です。
Ⅱ. やり方
1. 必要なパッケージをNuGetからインストールする
Install-Package Fleck
2. サンプルプログラムを書く
using Fleck; using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WebSocketServerTest { class Program { static void StartServer() { var server = new WebSocketServer("ws://127.0.0.1:8181"); server.RestartAfterListenError = true; // Nagleアルゴリズムを無効化する場合はtrueを指定する server.ListenerSocket.NoDelay = true; server.Start(socket => { socket.OnOpen = () => Console.WriteLine("Open!"); socket.OnClose = () => Console.WriteLine("Close!"); socket.OnMessage = message => { // 文字列データ受信時 socket.Send($"hello {message}"); }; socket.OnBinary = bytes => { // バイナリデータ受信時 }; }); } static async Task StartClient(string name) { var ws = new ClientWebSocket(); await ws.ConnectAsync(new Uri("ws://127.0.0.1:8181"), CancellationToken.None); await ws.SendAsync(Encoding.UTF8.GetBytes(name), WebSocketMessageType.Text, true, CancellationToken.None); var buffer = new byte[128]; await ws.ReceiveAsync(buffer, CancellationToken.None); Console.WriteLine(Encoding.UTF8.GetString(buffer)); await ws.CloseAsync(WebSocketCloseStatus.Empty, null, CancellationToken.None); } static async Task Main(string[] args) { StartServer(); await StartClient("tanaka"); } } }
実行結果
Open! hello tanaka Close!