Пример асинхронного сокета сервера 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ждать больше входящих данных от того же клиента?
Может кто-нибудь с большим опытом объяснить это мне, пожалуйста?
Спасибо !