2013-03-20 76 views
2

這是微軟插座教程http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx應該有這無限的2個break語句while循環

我有點糊塗了一個例子。第一個(真)無限循環後面跟着第四行4行,但我們只使用一個break語句。在第二個while循環中使用break應該繼續第一個while循環...不是? 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

這個例子中只有一個循環。 – 2013-03-20 12:21:20

+0

對不起,第二個沒有出於某種原因。我編輯 – 2013-03-20 12:21:34

+1

好吧,這意味着外層循環將繼續運行,所以它會不斷收聽傳入的消息。 – 2013-03-20 12:23:06

回答

2

是的,break語句只會退出inner while循環。這纔是重點。它接受連接,然後讀取所有數據。直到永遠。

7

你是正確的。本例中的外層循環不應該退出。這旨在不斷尋找新的連接。服務器傾向於遵循這種基本模式。

+0

謝謝你的快速回答。 – 2013-03-20 12:49:05

1

在這個例子中,Socket handler = listener.Accept();是一個等待客戶端連接的阻塞調用。

outer while循環只是保持服務器活着。所以它不需要break;

+0

謝謝你的時間。 – 2013-03-20 12:49:51