Подключение ClientWebSocket в C#
Клиент открывает канал через
ClientWebSocket.ConnectAsync. Вызов выполняет
HTTP-рукопожатие и переводит соединение в режим
WebSocket. Успех виден в свойстве State -
значение Open означает, что можно
вызывать SendAsync и ReceiveAsync.
В примерах может использоваться сторонний echo-сервис
"wss://echo.websocket.events" - локальный сервер
не нужен, но нужен интернет, и хост может быть
недоступен или нестабилен; успешный запуск не
гарантируется. Таймаут задают через
CancellationTokenSource, чтобы программа
не зависла при сбое сети:
using System.Net.WebSockets;
using ClientWebSocket client = new();
using CancellationTokenSource cts = new(TimeSpan.FromSeconds(8));
await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token);
Console.WriteLine(client.State);
После Open соединение держится открытым,
пока его не закроют через CloseAsync или
пока сервер не разорвёт канал. Повторный
ConnectAsync на том же экземпляре без
закрытия приведёт к ошибке - для нового сеанса
создают новый ClientWebSocket. Ниже канал
проверяют, закрывают и снова выводят состояние:
using System.Net.WebSockets;
using ClientWebSocket client = new();
using CancellationTokenSource cts = new(TimeSpan.FromSeconds(8));
await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token);
Console.WriteLine(client.State == WebSocketState.Open);
await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "done", CancellationToken.None);
Console.WriteLine(client.State);
Подключитесь к echo-сервису с ожиданием не
дольше 3 секунд и выведите в консоль,
открыт ли канал.