Как в клиенте организовать метод Send, чтобы он не создавал нового клиента каждый раз - C#
Формулировка задачи:
Начал изучать TCP. Решил написать клиет-серверный чат...начало пока такое:
Сервер:
Клиент:
Как в клиенте организовать метод Send, чтобы он не создавал нового клиента каждый раз, а использовал уже установленное подключение?
блин, хочется, чтобы у класса TcpClient было событие "данные отправлены" и на сервере его обрабатывать...и событие "данные приняты", чтобы обрабатывать это событие на клиенте)
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, чтобы он не создавал нового клиента каждый раз»
textual
Листинг программы
await stream.ReadAsync(bytes, 0, bytes.Length);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д