Здравствуйте!
надеюсь поможете с решением слудующей проблемы!
2 процесса обмениваются данными через порт! сервер в отдельном потоке запускает процедуру ожидания новых соединений и каждый раз, когда новое соединение установлено, асинхронно вызывает делегат _ConnectionResieved для обработки этого соединения! этот делегат-всего лишь пара операторов(то есть выполняется он совсем недолго), которые однако нельзя внести в сам цикл ожидания соединения! Это операторы асинхронного запуска соединений на прослушивание(через TcpClient.GetStream().BeginRead()) и еще несколько мелких действий
Так вот-проблема! сначал все работает нормально... сервер принимает несколько подключений(2 например-в моем тестовом примере)! эти соединения устанавливаются на прослушивание, по ним идет обмен данными с клиентами! после этого еще один клиент хочет установить соединение с сервером-соединение устанавливается... однако _ConnectionResieved.BeginInvoke просто не выполняется
не могу понять в чем дело
Цикл ожидания новых соединений на сервере(в отдельном потоке)
private void ListenThreadProc()
{
_tcpListener = new TcpListener(System.Net.IPAddress.Any, _port);
_tcpListener.Start();
_flag = true;
do
{
Console.WriteLine("Жду новое соединение...");
//жду нового соединения
ClientConnection cc = new ClientConnection(_tcpListener.AcceptTcpClient(), Guid.NewGuid().ToString());
Console.WriteLine("Новое соединение открыто...");
//асинхронно вызываю делегат обработки нового соединения, т.е. запуск его на прослушивание, сохранение ссылки на
//ClientConnection во внутренних структурах приложения
//асинхронный вызов этого делегата через время перестает выполняться
_ConnectionResieved.BeginInvoke(cc, new AsyncCallback(OnEndRead), _ConnectionResieved);
} while (_flag);
_tcpListener.Stop();
}
}