2013-03-20 2 views
2

Это пример из Microsoft сокетов учебника http://msdn.microsoft.com/en-us/library/6y0e13d3.aspxТам должна быть 2 заявление перерыва в этом бесконечном во время цикла

Я немного запутался. За первым (истинным) бесконечным циклом следует второй 4 строки вниз, но мы используем только один оператор break. Использование прерывания во втором цикле должно продолжаться в первом цикле ... нет? http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx

while (true) { 
    Console.WriteLine("Waiting for a connection..."); 
    // Program is suspended while waiting for an incoming connection. 
    Socket handler = listener.Accept(); 
    data = null; 

    // An incoming connection needs to be processed. 
    while (true) { 
     bytes = new byte[1024]; 
     int bytesRec = handler.Receive(bytes); 
     data += Encoding.ASCII.GetString(bytes,0,bytesRec); 
     if (data.IndexOf("<EOF>") > -1) { 
      break; 
      } 
     } 
    } 
+0

В этом примере есть только одна петля. –

+0

извините, второй не пришел по какой-то причине. Я отредактировал –

+1

ok, это означает, что внешний цикл будет продолжать работать, и поэтому он будет продолжать слушать входящие сообщения. –

ответ

2

Да, оператор break только выходит из внутреннего цикла while. В этом-то и дело. Он принимает соединение, а затем считывает все данные. Навсегда.

7

Вы правильно. Внешний цикл в этом примере не должен выходить. Это предназначено для постоянного поиска новых соединений. Серверы, как правило, следуют этой базовой схеме.

+0

благодарю вас за ваш быстрый ответ. –

1

В этом примере Socket handler = listener.Accept(); является блокирующим вызовом, ожидающим подключения клиентов.

Внешний замкнутый контур просто поддерживает сервер. поэтому он не нужен break;

+0

Благодарю вас за ваше время. –

Смежные вопросы