目录
article
如何在 C# WinFrom 应用中启动一个 WebSocket 服务?
如何在 C# WinFrom 应用中启动一个 WebSocket 服务?
在 C# WinForms 应用程序中启动 WebSocket 服务,你可以使用 System.Net.WebSockets 命名空间提供的类来实现。以下是一个简单的示例代码,演示了如何在 C# WinForms 应用程序中启动 WebSocket 服务:
using System;
using System.Net;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace YourNamespace
{
public partial class MainForm : Form
{
private HttpListener listener;
private CancellationTokenSource cancellationTokenSource;
public MainForm()
{
InitializeComponent();
}
private async void MainForm_Load(object sender, EventArgs e)
{
// 设置监听地址和端口
string url = "http://localhost:8888/";
// 创建并启动 HttpListener 实例
listener = new HttpListener();
listener.Prefixes.Add(url);
listener.Start();
// 接收客户端连接并处理请求
cancellationTokenSource = new CancellationTokenSource();
await AcceptWebSocketClientsAsync();
textBox1.AppendText("WebSocket 服务已启动!\n");
}
private async Task AcceptWebSocketClientsAsync()
{
while (true)
{
try
{
// 等待客户端连接请求
HttpListenerContext context = await listener.GetContextAsync();
// 检查是否是 WebSocket 连接请求
if (context.Request.IsWebSocketRequest)
{
HttpListenerWebSocketContext webSocketContext = await context.AcceptWebSocketAsync(null);
// 处理 WebSocket 连接
HandleWebSocketConnection(webSocketContext.WebSocket);
}
else
{
context.Response.StatusCode = 400;
context.Response.Close();
}
}
catch (Exception ex)
{
// 处理异常情况
textBox1.AppendText("发生错误:" + ex.Message + "\n");
}
}
}
private void HandleWebSocketConnection(WebSocket webSocket)
{
// 在这里可以编写自定义的 WebSocket 连接处理逻辑
// 比如接收和发送消息等
// 示例:接收并处理客户端发送的消息
Task.Run(async () =>
{
byte[] buffer = new byte[1024];
while (webSocket.State == WebSocketState.Open)
{
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
string message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
// 在此处可以处理收到的消息
// 示例:回复客户端消息
byte[] responseBuffer = System.Text.Encoding.UTF8.GetBytes("收到消息:" + message);
await webSocket.SendAsync(new ArraySegment<byte>(responseBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
});
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 停止服务并释放资源
listener.Stop();
cancellationTokenSource.Cancel();
}
}
}
上述示例代码在 WinForms 主窗体中启动了一个监听指定地址和端口的 HttpListener,并在其中通过异步方式接收 WebSocket 连接请求。在接收到连接后,可以在 HandleWebSocketConnection 方法中编写自定义的 WebSocket 连接处理逻辑。当窗体关闭时,停止服务并释放资源。
请根据你的实际需求和网络配置,修改示例代码中的 URL 地址和端口号,并根据需要处理接收和发送的消息。
请注意,为了运行此示例,可能需要在项目的引用中添加 System.Net.WebSockets 程序集,并确保你的应用程序具有监听指定地址和端口的权限。