在现代Web和桌面应用中,实时通信已成为不可或缺的功能。而WebSocket协议正是实现双向、低延迟通信的核心技术之一。本文将手把手教你使用C#语言编写一个完整的WebSocket客户端,即使你是编程小白,也能轻松上手!
WebSocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求-响应模式不同,WebSocket允许服务器主动向客户端推送数据,非常适合聊天应用、实时股票行情、在线游戏等场景。
在C#中实现WebSocket客户端,我们推荐使用.NET内置的 ClientWebSocket 类(位于 System.Net.WebSockets 命名空间)。该类自 .NET Core 2.1 起就已支持,无需额外安装NuGet包。
打开Visual Studio或使用命令行创建一个新控制台项目:
dotnet new console -n MyWebSocketClientcd MyWebSocketClient 在 Program.cs 文件中,替换为以下完整代码:
using System;using System.Net.WebSockets;using System.Text;using System.Threading;using System.Threading.Tasks;namespace MyWebSocketClient{ class Program { static async Task Main(string[] args) { // 创建WebSocket客户端实例 using var client = new ClientWebSocket(); try { // 连接到WebSocket服务器(这里以公共测试服务器为例) await client.ConnectAsync(new Uri("wss://echo.websocket.org"), CancellationToken.None); Console.WriteLine("✅ 已成功连接到WebSocket服务器!"); // 启动接收消息的任务 _ = ReceiveMessages(client); // 发送消息循环 while (client.State == WebSocketState.Open) { Console.Write("请输入要发送的消息(输入'exit'退出): "); string? message = Console.ReadLine(); if (message?.ToLower() == "exit") break; if (!string.IsNullOrWhiteSpace(message)) { byte[] buffer = Encoding.UTF8.GetBytes(message); await client.SendAsync( new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None); Console.WriteLine($"📤 已发送: {message}"); } } } catch (Exception ex) { Console.WriteLine($"❌ 连接失败: {ex.Message}"); } finally { if (client.State == WebSocketState.Open) { await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭", CancellationToken.None); } Console.WriteLine("🔌 WebSocket连接已关闭。"); } } static async Task ReceiveMessages(ClientWebSocket client) { var buffer = new byte[1024 * 4]; // 4KB缓冲区 while (client.State == WebSocketState.Open) { try { var result = await client.ReceiveAsync( new ArraySegment<byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Close) { await client.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); break; } string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine($"📥 收到消息: {receivedMessage}"); } catch (Exception ex) { Console.WriteLine($"⚠️ 接收消息时出错: {ex.Message}"); break; } } } }} 在终端中执行:
dotnet run 程序启动后会连接到 wss://echo.websocket.org(这是一个回显测试服务器,会原样返回你发送的消息)。你可以输入任意文本进行测试,输入 exit 退出程序。
ClientWebSocket 类实现,它是线程安全的。async/await),避免阻塞主线程。CloseAsync 正确关闭连接,释放资源。1. 连接超时:可在 ConnectAsync 中传入带超时的 CancellationToken。
2. 重连机制:生产环境中应添加自动重连逻辑,应对网络波动。
3. 消息分片处理:上述代码假设消息较小,若处理大消息,需检查 result.EndOfMessage 是否为 false 并拼接分片。
通过本教程,你已经掌握了如何用C#实现一个基础但功能完整的WebSocket协议实现。这项技能是构建现代实时通信C#应用的基石。无论是开发聊天系统、物联网设备通信,还是金融数据推送,你都可以在此基础上扩展功能。
记住,C#网络编程的世界远不止于此,继续探索吧!
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125782.html