Сколько раз я могу позвонить Socket.BeginAccept в C # - PullRequest
0 голосов
/ 01 октября 2019

Я из языка программирования Java. Я только начинаю свое приключение с C # и .Net. Я создаю приложение сокета сервера, используя C # - на примере Microsoft (https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example). Это пример кода (со страницы выше):

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();
}

... где allDoneManualResetEvent определено в области видимости класса. Я не могу понять, что на самом деле делает listener.BeginAccept. Например, если я не вызову метод allDone.WaitOne() для ожидания установления соединения, то что произойдет - сколько развызов метода listener.BeginAccept будет выполняться (быть успешным) внутри цикла до тех пор, пока он не начнет ждать (или может произойти сбой в конечном итоге). Возможно, я пропускаю что-то здесь. Может кто-нибудь объяснить это мне, пожалуйста?

С уважением,

Януш

1 Ответ

1 голос
/ 01 октября 2019

Намерение здесь состоит в том, чтобы метод AcceptCallback установил событие allDone, когда соединение принято. Затем цикл может продолжаться, чтобы принять другое входящее соединение, в то время как только что принятое соединение продолжается с тем, что ему нужно сделать.

Вы могли бы выполнить другую полезную работу в потоке прослушивания после вызова BeginAccept, если быу вас было что-то, что имело смысл.

Как ни странно, в документации явно не говорится (что я смог найти), что произойдет, если вы просто несколько раз позвоните BeginAccept без ожидания, но я бы порекомендовал этого не делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...