Пример асинхронного сокета сервера Microsoft

У меня есть вопрос относительноэтот вопрос («Асинхронный сервер сокет нескольких клиентов»).

Либо Microsoft измениласьпример так как Groos отвечает, или я действительно не понимаю - в примере это говорит:

        while (true) {
            // Set the event to nonsignaled state.
            allDone.Reset();

            // Start an asynchronous socket to listen for connections.
            Console.WriteLine("Waiting for a connection...");
            listener.BeginAccept( 
                new AsyncCallback(AcceptCallback),
                listener );

            // Wait until a connection is made before continuing.
            allDone.WaitOne();
        }

Как я понимаю, функция BeginAccept () вызывается непрерывно в цикле while (true), останавливается только и до тех пор, пока не будет вызвана функция AcceptCallback (), потому что первое, что происходит, - это allDone.Set ().

Но Гроо сказал

Проблема с примером MSDN заключается в том, что он допускает подключение только одного клиента (listener.BeginAccept вызывается только один раз).

И на самом деле я не понимаю, почему ManualResetEventвсе сделано используется вообще ... И я думал, что метод listener.EndAccept (ar) блокирует в любом случае.

Является ли listener.BeginAccept () выбрасывающим исключение, если оно вызывается второй раз, пока он еще работает? Но если так, то почему allDone.Set () находится перед слушателем. EndAccept (ar)?

И еще один вопрос:

Могу ли я просто вызвать handler.BeginReceive (...) в функции ReadCallback (IAsyncResult ar) после полученияEOFждать больше входящих данных от того же клиента?

Может кто-нибудь с большим опытом объяснить это мне, пожалуйста?

Спасибо !

Ответы на вопрос(2)

Ваш ответ на вопрос