要在C#中創建并運行一個WebSocket服務器,你可以使用System.Net.WebSockets命名空間中的WebSocket類。以下是一個簡單的WebSocket服務器示例:
首先,確保你的項目已經引用了System.Net.WebSockets命名空間。在Visual Studio中,右鍵單擊項目,選擇“添加引用”,然后在“程序集”選項卡中找到并添加System.Net.WebSockets。
創建一個名為WebSocketServer的新類,并在其中添加以下代碼:
using System;
using System.Net.WebSockets;
using System.Threading.Tasks;
namespace WebSocketServer
{
class Program
{
static async Task Main(string[] args)
{
// 定義WebSocket服務器的URI
string uri = "ws://localhost:5000";
// 創建WebSocket服務器
using (var server = new WebSocketServer(uri))
{
// 開始監聽客戶端連接
await server.StartAsync();
Console.WriteLine("WebSocket服務器正在運行...");
// 等待客戶端連接
await server.WaitForClientConnectionAsync();
// 處理客戶端消息
await server.HandleClientMessageAsync();
}
}
}
public class WebSocketServer
{
private readonly WebSocket _webSocket;
public WebSocketServer(string uri)
{
_webSocket = new WebSocket(uri);
}
public async Task StartAsync()
{
// 添加WebSocket事件處理程序
_webSocket.ClientConnected += WebSocket_ClientConnected;
_webSocket.ClientError += WebSocket_ClientError;
_webSocket.ClientMessageReceived += WebSocket_ClientMessageReceived;
_webSocket.ClientDisconnected += WebSocket_ClientDisconnected;
// 開始監聽客戶端連接
await _webSocket.StartAsync();
}
public async Task WaitForClientConnectionAsync()
{
byte[] buffer = new byte[1024 * 4];
WebSocketReceiveResult result;
do
{
result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
}
while (!result.CloseStatus.HasValue);
}
public async Task HandleClientMessageAsync()
{
byte[] buffer = new byte[1024 * 4];
WebSocketReceiveResult result;
do
{
result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
// 處理客戶端消息
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"收到客戶端消息: {message}");
// 發送響應給客戶端
string response = "服務器已收到您的消息";
byte[] responseBytes = Encoding.UTF8.GetBytes(response);
await _webSocket.SendAsync(new ArraySegment<byte>(responseBytes), result.MessageType, result.CloseStatus.Value == WebSocketCloseStatus.NormalClosure, CancellationToken.None);
}
while (!result.CloseStatus.HasValue);
}
private void WebSocket_ClientConnected(object sender, WebSocketClientConnectedEventArgs e)
{
Console.WriteLine($"客戶端已連接: {e.ClientId}");
}
private void WebSocket_ClientError(object sender, WebSocketErrorEventArgs e)
{
Console.WriteLine($"客戶端錯誤: {e.Exception}");
}
private void WebSocket_ClientMessageReceived(object sender, WebSocketClientMessageReceivedEventArgs e)
{
Console.WriteLine($"客戶端消息已接收: {e.Message}");
}
private void WebSocket_ClientDisconnected(object sender, WebSocketClientDisconnectedEventArgs e)
{
Console.WriteLine($"客戶端已斷開連接: {e.ClientId}");
}
}
}
運行WebSocketServer程序。服務器將在端口5000上監聽客戶端連接。
使用支持WebSocket的客戶端(如瀏覽器或其他WebSocket庫)連接到服務器并發送消息。服務器將接收到的消息原樣返回給客戶端。
注意:這個示例僅用于演示目的,實際應用中你可能需要添加更多的錯誤處理和功能。