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

websocket c#

作者:戮尽逆者   发布日期:2025-10-22   浏览:102

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

namespace WebSocketExample
{
    class Program
    {
        private static readonly CancellationTokenSource cts = new CancellationTokenSource();

        static async Task Main(string[] args)
        {
            string uri = "wss://example.com/socket";
            using (ClientWebSocket webSocket = new ClientWebSocket())
            {
                await webSocket.ConnectAsync(new Uri(uri), cts.Token);
                Console.WriteLine("Connected to WebSocket server");

                // Start receiving messages
                await ReceiveMessages(webSocket);

                // Send a message
                string message = "Hello, WebSocket!";
                byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
                await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, cts.Token);
                Console.WriteLine("Message sent: " + message);

                // Close the connection
                await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cts.Token);
                Console.WriteLine("Connection closed");
            }
        }

        private static async Task ReceiveMessages(ClientWebSocket webSocket)
        {
            byte[] receiveBuffer = new byte[1024 * 4];
            while (webSocket.State == WebSocketState.Open)
            {
                WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), cts.Token);
                if (result.MessageType == WebSocketMessageType.Close)
                {
                    await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cts.Token);
                    break;
                }
                else if (result.MessageType == WebSocketMessageType.Text)
                {
                    string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, result.Count);
                    Console.WriteLine("Received message: " + receivedMessage);
                }
            }
        }
    }
}

解释说明:

  1. 引入命名空间

    • System.Net.WebSockets 提供了用于创建和管理 WebSocket 连接的类。
    • System.Text 用于编码和解码字符串。
    • System.ThreadingSystem.Threading.Tasks 用于异步操作和任务管理。
  2. 主程序逻辑

    • 创建一个 ClientWebSocket 对象并连接到指定的 WebSocket 服务器。
    • 使用 ReceiveMessages 方法接收来自服务器的消息,并在控制台中打印出来。
    • 发送一条消息到服务器。
    • 关闭 WebSocket 连接。
  3. 接收消息

    • ReceiveMessages 方法中,使用循环不断接收消息,直到连接关闭。
    • 如果收到的是文本消息,则将其解码为字符串并打印出来;如果是关闭消息,则关闭连接。
  4. 异常处理

    • 代码中没有显式的异常处理。在实际应用中,建议添加适当的异常处理机制以确保程序的健壮性。

上一篇:c# 静态变量

下一篇:c#语言入门

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

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

Laravel 中文站