Как в клиенте организовать метод Send, чтобы он не создавал нового клиента каждый раз - C#

Узнай цену своей работы

Формулировка задачи:

Начал изучать TCP. Решил написать клиет-серверный чат...начало пока такое: Сервер:
public class Server
    {
        private HashSet<TcpClient> Clients = new HashSet<TcpClient>();
 
        public async void RunServerAsync()
        {
            var listener = new TcpListener(IPAddress.Any, 5000);
            listener.Start();
            try
            {
                while (true)
                {
                    var client = listener.AcceptTcpClient();
                    Console.WriteLine("Кто-то подключился");
                    Clients.Add(client);
                    Accept(client);
                }
            }
            finally
            {
                listener.Stop();
            }
        }

        private async Task Accept(TcpClient client)
        {
            await Task.Yield(); 
            using (var stream = client.GetStream())
                {
                    string msg = new BinaryReader(stream).ReadString();
                    Broadcast(msg, client);
                }
            
        }
 
        private void Broadcast(string msg, TcpClient sender)
        {
            Console.WriteLine(msg);//пока так
        }
    }
Клиент:
public class Client
    {
 
        private string _ServerName;
        private int _ServerPort;
        
        public Client(string serverName, int serverPort)
        {
            _ServerName = serverName;
            _ServerPort = serverPort;
 
            StartReceive();
        }
 
        public void Send(string message)
        {
            using (var Clnt = new System.Net.Sockets.TcpClient(_ServerName, _ServerPort))
            {
                using (var Strm = Clnt.GetStream())
                {
                    var Writer = new BinaryWriter(Strm);
                    Writer.Write(message);
                    Writer.Flush();
                }
            }

        }
 
        private async void StartReceive()
        {
            return;
        }

        public void Dispose()
        {
            
        }
    }
Как в клиенте организовать метод Send, чтобы он не создавал нового клиента каждый раз, а использовал уже установленное подключение? блин, хочется, чтобы у класса TcpClient было событие "данные отправлены" и на сервере его обрабатывать...и событие "данные приняты", чтобы обрабатывать это событие на клиенте)

Решение задачи: «Как в клиенте организовать метод Send, чтобы он не создавал нового клиента каждый раз»

textual
Листинг программы
await stream.ReadAsync(bytes, 0, bytes.Length);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы