Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c#websocket

作者:战虎天下   发布日期:2025-03-06   浏览:47

using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    private static async Task StartWebSocketClient()
    {
        // 创建一个客户端 WebSocket
        ClientWebSocket webSocket = new ClientWebSocket();

        // 连接到指定的 WebSocket 服务器
        await webSocket.ConnectAsync(new Uri("ws://example.com/socket"), CancellationToken.None);

        Console.WriteLine("连接已建立");

        try
        {
            // 准备接收数据的缓冲区
            byte[] receiveBuffer = new byte[1024 * 4];
            WebSocketReceiveResult receiveResult = null;

            // 持续接收消息
            while (webSocket.State == WebSocketState.Open)
            {
                receiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);

                if (receiveResult.MessageType == WebSocketMessageType.Close)
                {
                    await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
                    break;
                }
                else
                {
                    // 将接收到的字节数组转换为字符串并输出
                    string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, receiveResult.Count);
                    Console.WriteLine($"收到消息: {receivedMessage}");
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生错误: {ex.Message}");
        }
        finally
        {
            // 确保 WebSocket 关闭
            if (webSocket != null && webSocket.State != WebSocketState.Closed)
            {
                await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
            }
        }
    }

    static async Task Main(string[] args)
    {
        await StartWebSocketClient();
    }
}

解释说明:

  1. 创建 WebSocket 客户端:使用 ClientWebSocket 类来创建一个 WebSocket 客户端实例。
  2. 连接到服务器:通过 ConnectAsync 方法连接到指定的 WebSocket 服务器(URL)。
  3. 接收消息:使用 ReceiveAsync 方法持续接收来自服务器的消息,并将接收到的字节数组转换为字符串进行输出。
  4. 处理关闭消息:当接收到关闭消息时,调用 CloseAsync 方法关闭 WebSocket 连接。
  5. 异常处理:捕获可能出现的异常,并在控制台输出错误信息。
  6. 确保关闭连接:无论是否发生异常,确保 WebSocket 连接在最后被正确关闭。

希望这段代码和解释能帮助你理解如何在 C# 中实现 WebSocket 客户端。

上一篇:rabbitmq c#

下一篇:c#窗体控件随窗体变大

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c# rtsp

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站