使用 .NET 6.0 的简单 WebSocket 客户端和服务器应用程序

发布于:2025-07-22 ⋅ 阅读:(13) ⋅ 点赞:(0)

几个月前,有同事来找我,问能否用 .NET 创建一个简单的 WebSocket 服务器(以及之后的客户端)。据我了解,他想用它来控制对方电脑上的进程。或许对其他人也有用,所以我把它发布在这里。

让我们从服务器开始。我这里使用的是 .NET 6 和 ASP.NET Core,不需要任何额外的配置。它实际上是一个准系统应用程序,没有任何花哨的附加功能。

Console.Title = "Server";

var builder = WebApplication.CreateBuilder();

builder.WebHost.UseUrls("http://localhost:6666");

var app = builder.Build();

app.UseWebSockets();

app.Map("/ws", async context =>
{
    if (context.WebSockets.IsWebSocketRequest)
    {
        using (var webSocket = await context.WebSockets.AcceptWebSocketAsync())
        {
            while (true)
            {
                await webSocket.SendAsync(Encoding.ASCII.GetBytes($"Test - {DateTime.Now}"), WebSocketMessageType.Text, true, CancellationToken.None);
                await Task.Delay(1000);
            }
        }
    }
    else
    {
        context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
    }
});

await app.RunAsync();

端点/ws是 WebSocket 通信发生的地方,在这种情况下,$"Test - {DateTime.Now}"每秒只需发送一个字符串。

客户端同样简单。只需打开连接(无需任何错误处理😎)并读取预定义的固定缓冲区(在现实世界中,使用EndOfMessage属性是个好主意),直到连接关闭。

Console.Title = "Client";
using (var ws = new ClientWebSocket())
{
    await ws.ConnectAsync(new Uri("ws://localhost:6666/ws"), CancellationToken.None);

    var buffer = new byte[256];

    while (ws.State == WebSocketState.Open)
    {
        var result = await ws.ReceiveAsync(buffer, CancellationToken.None);
        if (result.MessageType == WebSocketMessageType.Close)
        {
            await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None);
        }
        else
        {
            Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, result.Count));
        }
    }
}

就是这样。现在用.NET 来实现这个真的很容易。

不知道他最终是如何使用该代码的,但如果你看到他进行黑客攻击计算机并通过 WebSocket 连接对其进行命令,则通信很可能建立在这段代码之上。😃

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。


网站公告

今日签到

点亮在社区的每一天
去签到