Как в клиенте организовать метод 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);