2

これは、Microsoftソケットチュートリアルhttp://msdn.microsoft.com/en-us/library/6y0e13d3.aspxの例です。

私は少し混乱しています。最初のwhile(true)無限ループの後に、4行下の2番目のループが続きますが、使用するbreakステートメントは1つだけです。2番目の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 に答える