// функция обрабатывает асинхронное чтение
private void ReadCallback(IAsyncResult ar)
{
while (!ar.IsCompleted) ;
Client client = (Client)(ar.AsyncState);
int index = Clients.IndexOf(client);
int numberOfBytesRead = Clients[index].readStream.EndRead(ar);
string str = Clients[index].name + " : " + Encoding.UTF8.GetString(Clients[index].readBuffer, 0, numberOfBytesRead);
// создали новый буфер
Clients[index].readBuffer = new byte[bufferLength];
// обработаем сообщение в главном окне
MessageEvent(str);
// отправляем его всем
SendToAll(str);
Clients[index].readAR = Clients[index].readStream.BeginRead(Clients[index].readBuffer, 0, Clients[index].readBuffer.Length, new AsyncCallback(ReadCallback), Clients[index]);
}
При отключении клиента закрывается сервер. Опытным путем было выяснено что это из-за BeginRead. Как исправить?
Пробовал делать счетчик - после трех сообщений не вызывыть очередной BeginRead, после чего закрывал клиент - все нормально.
Код: