static async Task RunViaSockets() { using (var server = new SimplSocketServer( () => new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { NoDelay = true })) { server.MessageReceived += (s, e) => { var blob = e.ReceivedMessage.Message; ReverseServer.Reverse(blob); server.Reply(blob, e.ReceivedMessage); }; server.Listen(new IPEndPoint(IPAddress.Loopback, 5000)); await Console.Out.WriteLineAsync( "Server running; type 'q' to exit, anything else to broadcast"); string line; while ((line = await Console.In.ReadLineAsync()) != null) { if (line == "q") { break; } var blob = Encoding.UTF8.GetBytes(line); server.Broadcast(blob); await Console.Out.WriteLineAsync( $"Broadcast {blob.Length} bytes to {server.CurrentlyConnectedClientCount} clients"); } } }