Асинхронный сервер - C#

Узнай цену своей работы

Формулировка задачи:

всем привет. У меня есть асинхронный сервер, который получает данные следующим образом:
private void OnRecieved(IAsyncResult ar)
{
   Socket sock = (Socket)ar.AsyncState;
   byte[] aryRet = GetRecievedData(ar);
   if (aryRet.Length < 1)
   {
      this.OnDisconnected();
      this.Disconnect();
   }
   else
   {
      // Обрабатываю запрос //
 
      sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), m_sock);
   }
}
Когда от клиента посылаются 2 запроса подряд, и если сервер не успел обработаться 1-ый запрос, то 2-ой просто пропадёт. Как сделать так, чтоб запрос вставал в очередь, и после обработке 1-го запроса началась обрабтка 2-го? Пробовал так:
private void OnRecieved(IAsyncResult ar)
{
   Socket sock = (Socket)ar.AsyncState;
   byte[] aryRet = GetRecievedData(ar);
   if (aryRet.Length < 1)
   {
      this.OnDisconnected();
      this.Disconnect();
   }
   else
   {
      sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), m_sock);
 
      // Обрабатываю запрос //
   }
}
Всёравно.... Можно сделать так конечно:
for(int i=0;i<N;i++)
   sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), m_sock);
Но тогда создаются N потоков для прослушки....а если клиентов много, то это не вариант...

Решение задачи: «Асинхронный сервер»

textual
Листинг программы
sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), sock)

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы