using System; using System.Net; using System.Net.Sockets; const char DELIM = ' '; const int DELAY_DURATION_S = 990; short ReadPort() => args.Length != 0 && short.TryParse(args[0], out var port) ? port : (short)22; IList ReadBanner() => Console.In.ReadToEnd().Split(DELIM, StringSplitOptions.RemoveEmptyEntries); async Task SshClientHandler(TcpClient client, IEnumerable banner) { var remote = client.Client.RemoteEndPoint; Console.WriteLine($"{remote}: Client connected."); try { using (client) { var stream = client.GetStream(); var writer = new StreamWriter(stream) { AutoFlush = true }; while (true) { foreach (var word in banner) { await writer.WriteAsync($"{word}{DELIM}"); await Task.Delay(DELAY_DURATION_S); } Console.WriteLine($"{remote}: Client read it all!"); } } } catch (Exception ex) { Console.WriteLine($"{remote}: Client handler error: {ex.Message}"); } finally { Console.WriteLine($"{remote}: Client hung up"); } } // main var banner = ReadBanner(); var port = ReadPort(); var listener = new TcpListener(IPAddress.Any, port); using (listener) { listener.Start(); Console.WriteLine($"Listening on port {port}..."); while (true) { try { var client = await listener.AcceptTcpClientAsync(); _ = Task.Run(() => SshClientHandler(client, banner)); } catch (Exception ex) { Console.WriteLine($"Accept error: {ex.Message}"); } } }