// один раз инициализировали
var tcpListener = new TcpListener(IPAddress.Any, 8090);
tcpListener.Start();
tcpListener.BeginAcceptTcpClient(OnAcceptTCPClient, null); // Начали ждать коннектов
// На коннект клиента
private void OnAcceptTCPClient(IAsyncResult ar)
{
var client = tcpListener.EndAcceptTcpClient(ar);
new ClientReceiver(client); // Здесь будем асинхронно получать данные от клиентов.
lock (clients)
clients.Add(client); // сохранили для отправок
// начинаем ждать новых коннектов
tcpListener.BeginAcceptTcpClient(OnAcceptTCPClient, null);
}
ClientReceiver(TcpClient tcpClient) {
buffer = new byte[READ_BUFFER_SIZE];
stream = tcpClient.GetStream();
asyncResult = stream.BeginRead(buffer, 0, READ_BUFFER_SIZE, ReadStreamCallback, null);
}
// когда данные пришли
private void ReadStreamCallback(IAsyncResult ar)
{
int readed;
readed = stream.EndRead(ar);
AddData(buffer, readed); // обрабатываем, что получили
// запускаем новое ожидание
asyncResult = stream.BeginRead(buffer, 0, READ_BUFFER_SIZE, ReadStreamCallback, null);
}
<TextBox Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}" />
stream = tcpClient.GetStream();