C# websocketserver怎么保持连接

   2024-10-06 5040
核心提示:要保持连接,您可以使用心跳机制来定期发送消息以确保连接保持活动状态。以下是一个简单的示例代码,演示如何使用C#编写一个WebS

要保持连接,您可以使用心跳机制来定期发送消息以确保连接保持活动状态。以下是一个简单的示例代码,演示如何使用C#编写一个WebSocket服务器并实现心跳功能:

using System;using System.Net;using System.Net.WebSockets;using System.Text;using System.Threading;using System.Threading.Tasks;class WebSocketServer{    private HttpListener listener;    private CancellationTokenSource cancellationTokenSource;    public async Task Start(string url)    {        listener = new HttpListener();        listener.Prefixes.Add(url);        listener.Start();        Console.WriteLine("Server started");        while (true)        {            HttpListenerContext context = await listener.GetContextAsync();            if (context.Request.IsWebSocketRequest)            {                ProcessWebSocketRequest(context);            }            else            {                context.Response.StatusCode = 400;                context.Response.Close();            }        }    }    private async Task ProcessWebSocketRequest(HttpListenerContext context)    {        WebSocketContext webSocketContext = await context.AcceptWebSocketAsync(null);        WebSocket webSocket = webSocketContext.WebSocket;        // Start a task to keep the connection alive        cancellationTokenSource = new CancellationTokenSource();        Task.Run(async () =>        {            while (webSocket.State == WebSocketState.Open)            {                try                {                    await webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes("Ping")), WebSocketMessageType.Text, true, cancellationTokenSource.Token);                    await Task.Delay(5000); // Send ping every 5 seconds                }                catch (WebSocketException)                {                    break;                }            }        });        // Handle incoming messages        byte[] buffer = new byte[1024];        while (webSocket.State == WebSocketState.Open)        {            WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), cancellationTokenSource.Token);            if (result.MessageType == WebSocketMessageType.Close)            {                break;            }            else if (result.MessageType == WebSocketMessageType.Text)            {                string message = Encoding.UTF8.GetString(buffer, 0, result.Count);                Console.WriteLine("Received message: " + message);            }        }        await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);    }    public void Stop()    {        cancellationTokenSource?.Cancel();        listener.Stop();        listener.Close();    }}class Program{    static async Task Main(string[] args)    {        WebSocketServer server = new WebSocketServer();        await server.Start("http://localhost:8080/");    }}

在上面的示例中,我们创建了一个简单的WebSocket服务器,并在每5秒发送一个"Ping"消息以保持连接活动状态。您可以根据需求调整心跳间隔和消息内容。在客户端断开连接时,服务器会停止心跳并关闭连接。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号