C#でWebsocketの通信内容を取得する方法

C# の System.Net.WebSockets 名前空間にある WebSocket クラスを利用して WebSocket 接続の確立と通信の実装ができます。

まず、WebSocket クライアントインスタンスを作るには、ClientWebSocket クラスを使用し、ConnectAsync メソッドで WebSocket サーバーに接続します。

using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (ClientWebSocket clientWebSocket = new ClientWebSocket())
        {
            Uri serverUri = new Uri("wss://example.com/websocket");
            await clientWebSocket.ConnectAsync(serverUri, CancellationToken.None);
            
            // 连接成功后,可以发送和接收消息
        }
    }
}

接続が成功したら、SendAsyncメソッドによるメッセージ送信とReceiveAsyncメソッドによるメッセージ受信が可能になります。

using (ClientWebSocket clientWebSocket = new ClientWebSocket())
{
    // ...

    // 发送消息
    string message = "Hello, WebSocket!";
    byte[] messageBytes = Encoding.UTF8.GetBytes(message);
    await clientWebSocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None);
    
    // 接收消息
    byte[] receiveBuffer = new byte[1024];
    while (true)
    {
        WebSocketReceiveResult receiveResult = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
        if (receiveResult.MessageType == WebSocketMessageType.Close)
        {
            await clientWebSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
            break;
        }
        
        string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, receiveResult.Count);
        Console.WriteLine("Received: " + receivedMessage);
    }
}

WebSocketMessageType.Text のパラメータを WebSocketMessageType.Binary に置き換えると、バイナリ メッセージを送受信できます。

WebSocketは双方向通信のため、サーバーからクライアントへもメッセージ送信が可能です。実運用では、送信と受信を別スレッドまたはタスクで処理して、ブロックを避けることが一般的です。

bannerAds