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小时之内自觉删除。
若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。