溫馨提示×

c# websocketserver怎樣運行

c#
小樊
157
2024-12-02 16:43:55
欄目: 編程語言

要在C#中創建并運行一個WebSocket服務器,你可以使用System.Net.WebSockets命名空間中的WebSocket類。以下是一個簡單的WebSocket服務器示例:

  1. 首先,確保你的項目已經引用了System.Net.WebSockets命名空間。在Visual Studio中,右鍵單擊項目,選擇“添加引用”,然后在“程序集”選項卡中找到并添加System.Net.WebSockets。

  2. 創建一個名為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}");
        }
    }
}
  1. 運行WebSocketServer程序。服務器將在端口5000上監聽客戶端連接。

  2. 使用支持WebSocket的客戶端(如瀏覽器或其他WebSocket庫)連接到服務器并發送消息。服務器將接收到的消息原樣返回給客戶端。

注意:這個示例僅用于演示目的,實際應用中你可能需要添加更多的錯誤處理和功能。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女