2

这是来自 Microsoft 套接字教程http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx的示例

我有点困惑。第一个 while(true) 无限循环后面跟着第二个 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;
            }
        }
    }
4

3 回答 3

7

你是对的。本例中的外循环不应该退出。这是为了不断寻找新的连接。服务器倾向于遵循这种基本模式。

于 2013-03-20T12:22:25.790 回答
2

是的,break 语句只退出内部的 while 循环。这才是重点。它正在接受连接,然后读取所有数据。直到永远。

于 2013-03-20T12:24:29.240 回答
1

在此示例中,Socket handler = listener.Accept();是等待客户端连接的阻塞调用。

外部 while 循环只是让服务器保持活动状态。所以它不需要break;

于 2013-03-20T12:22:58.193 回答