C WebSocket 服务器开发指南
WebSocket 是一种网络通信协议,它允许在单个 TCP 连接上进行全双工通信。在 C 中,WebSocket 服务器开发可以用于构建实时、交互式的应用程序,如在线聊天、实时游戏、股票交易系统等。本文将围绕 C 语言,详细介绍如何开发一个 WebSocket 服务器。
环境准备
在开始之前,请确保您已经安装了以下环境:
- .NET Core SDK 或 .NET 5/6/7 SDK
- Visual Studio 或其他支持 C 开发的 IDE
创建 WebSocket 服务器
1. 创建项目
使用 Visual Studio 创建一个新的 C 项目。选择“ASP.NET Core Web 应用程序”模板,并确保选择“WebAssembly”作为项目类型。
2. 引入 WebSocket 库
在项目中,引入 `Microsoft.AspNetCore.WebSockets` NuGet 包。在 Visual Studio 中,右键点击项目,选择“管理 NuGet 包”,搜索并安装 `Microsoft.AspNetCore.WebSockets`。
3. 创建 WebSocket 服务器
在项目中创建一个新的类 `WebSocketServer.cs`,并添加以下代码:
csharp
using System;
using System.Net;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
public class WebSocketServer
{
private readonly HttpListener _listener;
private readonly CancellationTokenSource _cts;
public WebSocketServer()
{
_listener = new HttpListener();
_cts = new CancellationTokenSource();
}
public async Task StartAsync()
{
_listener.Prefixes.Add("http://localhost:8080/");
_listener.Start();
while (!_cts.IsCancellationRequested)
{
var context = await _listener.GetContextAsync();
if (context.Request.IsWebSocketRequest)
{
await ProcessRequestAsync(context);
}
}
}
private async Task ProcessRequestAsync(HttpListenerContext context)
{
var webSocket = await context.AcceptWebSocketAsync(new WebSocketOptions());
var buffer = new byte[1024];
var result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"Received message: {message}");
var response = Encoding.UTF8.GetBytes("Hello from server!");
await webSocket.SendAsync(new ArraySegment(response), WebSocketMessageType.Text, true, CancellationToken.None);
}
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
}
public void Stop()
{
_listener.Stop();
_cts.Cancel();
}
}
4. 配置启动类
在 `Startup.cs` 文件中,配置应用程序服务和中间件:
csharp
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddWebSocketServer();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapWebSocket("/ws");
});
}
}
5. 启动服务器
在 `Program.cs` 文件中,添加以下代码以启动 WebSocket 服务器:
csharp
using System;
using System.Threading.Tasks;
public class Program
{
public static async Task Main(string[] args)
{
var server = new WebSocketServer();
await server.StartAsync();
Console.WriteLine("WebSocket server started. Press Enter to stop.");
Console.ReadLine();
server.Stop();
}
}
客户端连接
要连接到 WebSocket 服务器,可以使用任何支持 WebSocket 的客户端库,如 JavaScript 的 `WebSocket` 对象。以下是一个简单的 JavaScript 客户端示例:
javascript
const socket = new WebSocket("ws://localhost:8080/ws");
socket.onopen = function(event) {
console.log("Connected to server");
socket.send("Hello from client!");
};
socket.onmessage = function(event) {
console.log("Received message from server: " + event.data);
};
socket.onerror = function(error) {
console.log("WebSocket Error: " + error);
};
socket.onclose = function(event) {
console.log("Disconnected from server");
};
总结
本文介绍了如何使用 C 语言开发一个 WebSocket 服务器。通过创建一个简单的服务器和客户端示例,您可以看到如何使用 WebSocket 进行实时通信。WebSocket 服务器在构建实时应用程序时非常有用,可以用于各种场景,如在线聊天、实时游戏和股票交易系统等。希望本文能帮助您入门 C WebSocket 服务器开发。
Comments NOTHING