当前位置:首页 > 编程技术 > 正文内容

C#中的WebSocket代码范例

C#中的WebSocket代码范例

随着Web技术的发展,WebSocket已经成为实现浏览器与服务器之间全双工通信的标准协议。它允许服务端主动向客户端推送数据,非常适合需要实时交互的应用场景,如在线游戏、股票行情更新、聊天应用等。本文将通过一个简单的示例来介绍如何在C#中使用WebSocket进行开发。

一、环境准备

首先确保你的开发环境中已经安装了.NET Core或.NET Framework。本教程将基于.NET Core 3.1及以上版本编写。此外,还需要安装Microsoft.AspNetCore.WebSockets包,如果你的项目是ASP.NET Core应用的话。

创建项目

打开命令行工具,运行以下命令创建一个新的ASP.NET Core Web应用程序:

dotnet new web -n WebSocketDemo cd WebSocketDemo

接着,在项目目录下打开Startup.cs文件,确保已添加对WebSockets的支持。在ConfigureServices方法内添加如下配置:

public void ConfigureServices(IServiceCollection services) {    services.AddControllersWithViews(); }

并在Configure方法中加入中间件支持WebSocket:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {    if (env.IsDevelopment())    {        app.UseDeveloperExceptionPage();    }    else    {        app.UseExceptionHandler("/Home/Error");        app.UseHsts();    }    app.UseHttpsRedirection();    app.UseStaticFiles();    app.UseRouting();    app.UseAuthorization();    // 添加WebSocket中间件    app.UseWebSockets();    app.UseEndpoints(endpoints =>    {        endpoints.MapControllerRoute(            name: "default",            pattern: "{controller=Home}/{action=Index}/{id?}");    }); }

二、服务器端实现

接下来,我们将在控制器中处理WebSocket连接请求。创建一个新的控制器WebSocketController.cs,并实现基本的WebSocket通信逻辑。

using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.WebSockets; using System.Threading.Tasks; [ApiController] [Route("api/[controller]")] public class WebSocketController : ControllerBase {    [HttpGet]    public async Task Get()    {        if (HttpContext.WebSockets.IsWebSocketRequest)        {            using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();            await Echo(webSocket);        }        else        {            HttpContext.Response.StatusCode = 400;        }    }    private async Task Echo(WebSocket webSocket)    {        var buffer = new byte[1024 * 4];        WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);        while (webSocket.State == WebSocketState.Open)        {            string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);            Console.WriteLine($"Received: {receivedMessage}");            // 发送回同样的消息            await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);            result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);        }    } }

这段代码实现了接受WebSocket连接,并且每当接收到客户端的消息时都会将其原样返回给客户端。

三、客户端实现

为了测试上面的服务,我们需要一个简单的HTML页面作为客户端。在项目的wwwroot目录下创建一个名为index.html的文件,并加入以下内容:

<!DOCTYPE html> <html> <head>    <title>WebSocket Client</title> </head> <body>    <h1>WebSocket Demo</h1>    <input id="messageInput" type="text" placeholder="Enter a message">    <button onclick="sendMessage()">Send</button>    <ul id="messages"></ul>    <script>        const wsUri = "wss://localhost:5001/api/websocket"; // 根据实际情况调整URL        let websocket = new WebSocket(wsUri);        websocket.onopen = function (event) {            console.log('Connected to server');        };        websocket.onmessage = function (event) {            const messages = document.getElementById('messages');            const message = document.createElement('li');            message.textContent = `Server: ${event.data}`;            messages.appendChild(message);        };        function sendMessage() {            const input = document.getElementById('messageInput');            websocket.send(input.value);            input.value = '';        }    </script> </body> </html>

这个页面包含了一个文本输入框和发送按钮,用户可以输入消息并通过WebSocket发送给服务器,然后接收来自服务器的响应并在列表中显示。

四、运行测试

现在你可以启动你的ASP.NET Core应用程序,并访问/index.html来测试WebSocket的功能了。试着从浏览器输入一些消息,看看它们是否能够被正确地传送到服务器并且得到回复。


本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://10zhan.com/biancheng/11597.html

分享给朋友:

“C#中的WebSocket代码范例” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何...

【说站】Java从resources读取文件内容的方法有哪些

【说站】Java从resources读取文件内容的方法有哪些

本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构├── main│ ├── java│ │ └── ...

【说站】linux中redis如何以redis用户重启?

【说站】linux中redis如何以redis用户重启?

通过上图我们可以看到,目前状态是已经以 redis 用户启动着,我想修改下 redis 的密码,然后怎么以 redis 用户重启呢?redis 是 nologin 用户,不能通过 su redis 切...