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

c# websocket

作者:一脸帅气   发布日期:2026-05-01   浏览:133

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

class Program
{
    static async Task Main(string[] args)
    {
        ClientWebSocket websocket = new ClientWebSocket();
        try
        {
            // 连接到 WebSocket 服务器
            await websocket.ConnectAsync(new Uri("wss://example.com/socket"), CancellationToken.None);
            Console.WriteLine("Connected to WebSocket server.");

            // 发送消息
            string message = "Hello, WebSocket!";
            byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
            await websocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
            Console.WriteLine("Message sent.");

            // 接收消息
            byte[] receiveBuffer = new byte[1024 * 4];
            while (websocket.State == WebSocketState.Open)
            {
                WebSocketReceiveResult result = await websocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
                if (result.MessageType == WebSocketMessageType.Close)
                {
                    await websocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
                    break;
                }
                else
                {
                    string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, result.Count);
                    Console.WriteLine($"Received: {receivedMessage}");
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
        finally
        {
            if (websocket.State != WebSocketState.Closed)
            {
                await websocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
            }
        }
    }
}

解释说明:

  1. 连接到 WebSocket 服务器:

    • 使用 ClientWebSocket 类创建一个 WebSocket 客户端实例。
    • 使用 ConnectAsync 方法连接到指定的 WebSocket 服务器(URL 示例为 wss://example.com/socket)。
  2. 发送消息:

    • 将要发送的消息字符串编码为字节数组。
    • 使用 SendAsync 方法将消息发送到服务器。参数包括要发送的数据、消息类型(文本或二进制)、是否是最后一部分以及取消令牌。
  3. 接收消息:

    • 创建一个缓冲区用于接收消息。
    • 使用 ReceiveAsync 方法循环接收来自服务器的消息,直到连接关闭。
    • 如果接收到的是关闭消息,则关闭 WebSocket 连接;否则,解码并打印接收到的消息。
  4. 异常处理和清理:

    • 使用 try-catch-finally 块来捕获可能发生的异常,并确保在程序结束时正确关闭 WebSocket 连接。

上一篇:c# ref

下一篇:c# substring

大家都在看

c# 二进制

c# 创建目录

c# socket服务端连接多个客户端

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

c# invoke方法

.net和c#

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

Laravel 中文站