2013-03-20 121 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