Асинхронная обработка TCP-запросов - C#
Формулировка задачи:
Добрый вечер.
Как реализовать асинхронную передачу сообщений, то есть держать связь с подключенным клиентом и принимать от него сообщения?
Решение задачи: «Асинхронная обработка TCP-запросов»
textual
Листинг программы
using System; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading.Tasks; public class Program { public static void Main(string[] args) { MainAsync().GetAwaiter().GetResult(); } static async Task MainAsync() { Console.WriteLine("Starting..."); var server = new TcpListener(IPAddress.Parse("0.0.0.0"), 66); server.Start(); Console.WriteLine("Started."); while (true) { var client = await server.AcceptTcpClientAsync().ConfigureAwait(false); var cw = new ClientWorking(client, true); Task.Run((Func<Task>)cw.DoSomethingWithClientAsync); } } } class ClientWorking { TcpClient _client; bool _ownsClient; public ClientWorking(TcpClient client, bool ownsClient) { _client = client; _ownsClient = ownsClient; } public async Task DoSomethingWithClientAsync() { try { using (var stream = _client.GetStream()) { using (var sr = new StreamReader(stream)) using (var sw = new StreamWriter(stream)) { await sw.WriteLineAsync("Hi. This is x2 TCP/IP easy-to-use server").ConfigureAwait(false); await sw.FlushAsync().ConfigureAwait(false); var data = default(string); while (!((data = await sr.ReadLineAsync().ConfigureAwait(false)).Equals("exit", StringComparison.OrdinalIgnoreCase))) { await sw.WriteLineAsync(data).ConfigureAwait(false); await sw.FlushAsync().ConfigureAwait(false); } } } } finally { if (_ownsClient && _client != null) { (_client as IDisposable).Dispose(); _client = null; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д