.net websocket服务端

.net websocket服务端可以通过安装System.Net.WebSockets库实现,创建WebSocketServer类并继承自ClientWebSocket类。

WebSocket简介

WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间可以实时双向传输数据,而不需要频繁地建立和关闭连接,WebSocket在.NET中的实现主要依赖于System.Net.WebSockets命名空间。

安装WebSocket库

在使用WebSocket之前,需要先安装相应的库,在项目中,可以通过NuGet包管理器来安装Microsoft.AspNetCore.WebSockets包。

.net websocket服务端

创建WebSocket服务器

1、引入命名空间:

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

2、创建一个WebSocket服务器类:

.net websocket服务端

public class WebSocketServer
{
    private readonly HttpListener _listener;
    private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
    public WebSocketServer(string url)
    {
        _listener = new HttpListener();
        _listener.Prefixes.Add(url);
        _listener.Start();
    }
    public async Task Start()
    {
        while (!_cancellationTokenSource.IsCancellationRequested)
        {
            var context = await _listener.GetContextAsync();
            if (context != null && context.RequestType == "CONNECT")
            {
                await ProcessRequest(context);
            }
        }
    }
    private async Task ProcessRequest(HttpListenerContext context)
    {
        var webSocketContext = await context.AcceptWebSocketAsync(null);
        if (webSocketContext != null)
        {
            // 处理WebSocket连接请求
            await ProcessWebSocketConnection(webSocketContext);
        }
    }
    private async Task ProcessWebSocketConnection(HttpListenerWebSocketContext webSocketContext)
    {
        try
        {
            // 读取客户端发送的消息并广播给所有连接的客户端
            using (var buffer = new byte[1024])
            {
                var bytesRead = await webSocketContext.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
                if (bytesRead > 0)
                {
                    var message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
                    await SendMessageToAllClients(message);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
        finally
        {
            webSocketContext.Abort(); // 关闭WebSocket连接
        }
    }
}

创建WebSocket客户端(HTML页面)

1、引入JavaScript库:<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjsclient/1.5.0/sockjs.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>,这两个库分别用于处理WebSocket连接和消息传递。

2、编写HTML代码:

.net websocket服务端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF8">
    <meta name="viewport" content="width=devicewidth, initialscale=1.0">
    <title>WebSocket Client</title>
</head>
<body>
    <input type="text" id="message" placeholder="Enter a message..."> <button onclick="sendMessage()">Send</button> <div id="chat"></div>
    <script>
        var socket = new SockJS('/ws'); // WebSocket服务器地址,根据实际情况修改
        var stompClient = Stomp.over(socket); // 使用STOMP协议处理消息传递,需要先安装stomp.js库(参考上面的步骤)
        stompClient.connect({}, function (frame) { console.log('Connected: ' + frame); }); // 连接到WebSocket服务器,成功连接后会触发回调函数,打印日志信息到控制台。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/481841.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-04-16 05:21
下一篇 2024-04-16 05:25

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入