Асинхронный сервер - 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)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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