创建基于客户端 Websocket 的控制台应用程序

osh*_*nen 7 c# linux .net-core

目前,我正在使用 REST 使用我的控制台应用程序使用来自外部服务/服务器的数据,但它不是很实时。

任何人都可以提供一个非常基本的工作示例,说明如何将 .net core 控制台应用程序连接到wss://echo.websocket.org?

我已经开始:

using System;
using System.Net.WebSockets;

namespace websocket
{
    class Program
    {
        static void Main(string[] args)
        {

            using (var ws = new WebSocket("wss://echo.websocket.org"))
            {

            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但new WebSocket("wss://echo.websocket.org"))显示错误Cannot create an instance of the abstract type or interface 'WebSocket' [websocket]csharp(CS0144)

小智 15

如果您想不使用库来解决问题,您将不得不努力解决 .NET 的一些内部问题。

以下代码应该提供一个简单的工作解决方案......

public static async Task Main(string[] args)
{
    CancellationTokenSource source = new CancellationTokenSource();
    using (var ws = new ClientWebSocket())
    {
        await ws.ConnectAsync(new Uri("wss://echo.websocket.org"), CancellationToken.None);
        byte[] buffer = new byte[256];
        while (ws.State == WebSocketState.Open)
        {
            var result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            if (result.MessageType == WebSocketMessageType.Close)
            {
                await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
            }
            else
            {
                HandleMessage(buffer, result.Count);
            }
        }
    }
}

private static void HandleMessage(byte[] buffer, int count)
{
    Console.WriteLine($"Received {BitConverter.ToString(buffer, 0, count)}");
}
Run Code Online (Sandbox Code Playgroud)

  • 你指的“斗争”是什么?你的代码对我来说看起来非常简单(因此投票)。 (5认同)