// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WebSocketSample { public class Program { public static void Main(string[] args) { RunWebSockets().GetAwaiter().GetResult(); } private static async Task RunWebSockets() { var ws = new ClientWebSocket(); await ws.ConnectAsync(new Uri("ws://localhost:5000/chat/ws"), CancellationToken.None); Console.WriteLine("Connected"); var sending = Task.Run(async () => { string line; while ((line = Console.ReadLine()) != null) { var bytes = Encoding.UTF8.GetBytes(line); await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Text, endOfMessage: true, cancellationToken: CancellationToken.None); } await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); }); var receiving = Receiving(ws); await Task.WhenAll(sending, receiving); } private static async Task Receiving(ClientWebSocket ws) { var buffer = new byte[2048]; while (true) { var result = await ws.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Text) { Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, result.Count)); } else if (result.MessageType == WebSocketMessageType.Binary) { } else if (result.MessageType == WebSocketMessageType.Close) { await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); break; } } } } }