温馨提示×

c# websocketserver怎样发送消息

c#
小樊
86
2024-12-02 16:47:52
栏目: 编程语言

在C#中,你可以使用System.Net.WebSockets命名空间中的WebSocket类来创建一个WebSocket服务器。以下是一个简单的示例,展示了如何创建一个WebSocket服务器并在接收到客户端连接时发送消息:

using System;
using System.Net.WebSockets;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;

namespace WebSocketServer
{
    public class WebSocketHandler
    {
        private readonly WebSocket _webSocket;

        public WebSocketHandler(WebSocket webSocket)
        {
            _webSocket = webSocket;
        }

        public async Task OnConnectedAsync()
        {
            // 接收客户端发送的消息
            var buffer = new byte[1024 * 4];
            WebSocketReceiveResult result;

            do
            {
                result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
                var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
                Console.WriteLine($"Received message: {message}");
            } while (!result.CloseStatus.HasValue);

            // 向客户端发送消息
            var responseMessage = "Hello from WebSocket server!";
            var responseBuffer = Encoding.UTF8.GetBytes(responseMessage);
            await _webSocket.SendAsync(new ArraySegment<byte>(responseBuffer), result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
        }
    }

    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            builder.Services.AddControllers();
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen();

            var app = builder.Build();
            app.UseHttpsRedirection();
            app.UseAuthorization();
            app.MapControllers();

            // 注册WebSocket路由
            app.Map("/ws", async (HttpContext context) =>
            {
                if (context.WebSockets.IsWebSocketRequest)
                {
                    var webSocket = await context.WebSockets.AcceptWebSocketAsync();
                    var webSocketHandler = new WebSocketHandler(webSocket);
                    await webSocketHandler.OnConnectedAsync();
                }
                else
                {
                    context.Response.StatusCode = StatusCodes.Status400BadRequest;
                    await context.Response.WriteAsync("This endpoint only supports WebSocket connections.");
                }
            });

            app.Run();
        }
    }
}

在这个示例中,我们创建了一个简单的HTTP服务器,监听/ws路径上的WebSocket连接。当客户端连接到服务器时,OnConnectedAsync方法会被调用。在这个方法中,我们首先接收客户端发送的消息,然后向客户端发送一条响应消息。

0