Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpWsRcv 503 of 509 menu
◀ ▶

Получение сообщения WebSocket в C#

Очередной кадр читают методом ReceiveAsync. Вызов заполняет буфер байтами и возвращает WebSocketReceiveResult. Поле MessageType показывает текст или закрытие; Count - сколько байтов записано в буфер.

Ниже - сценарий со сторонним echo-сервисом при наличии сети; успешный запуск не гарантируется. Echo-сервис возвращает текст, который клиент только что отправил. Отправим "hello-ws", затем прочитаем ответ в буфер 128 байт и выведем строку - ожидается "hello-ws":

using System.Net.WebSockets; using System.Text; using ClientWebSocket client = new(); using CancellationTokenSource cts = new(TimeSpan.FromSeconds(8)); await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token); byte[] send = Encoding.UTF8.GetBytes("hello-ws"); await client.SendAsync(send, WebSocketMessageType.Text, true, CancellationToken.None); byte[] buffer = new byte[128]; WebSocketReceiveResult result = await client.ReceiveAsync(buffer, CancellationToken.None); Console.WriteLine(result.MessageType); Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, result.Count));

Строку собирают только по result.Count, а не по всей длине массива. Поле EndOfMessage показывает, поместился ли кадр в буфер целиком:

using System.Net.WebSockets; using System.Text; using ClientWebSocket client = new(); using CancellationTokenSource cts = new(TimeSpan.FromSeconds(8)); await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token); await client.SendAsync(Encoding.UTF8.GetBytes("ping"), WebSocketMessageType.Text, true, CancellationToken.None); byte[] buffer = new byte[128]; WebSocketReceiveResult result = await client.ReceiveAsync(buffer, CancellationToken.None); Console.WriteLine(result.EndOfMessage);

Отправьте "metric" на echo-сервис и выведите длину полученного текста.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить