1

このコードスニペットをオンラインで見つけました。while(true)ただし、このコードでブロッキングがどのように行われるのか理解できません。

private void ListenForClients()
{
  this.tcpListener.Start();

  while (true)
  {
    //blocks until a client has connected to the server
    TcpClient client = this.tcpListener.AcceptTcpClient();

    //create a thread to handle communication
    //with connected client
    Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
    clientThread.Start(client);
  }
}

誰かが私にそれを説明できますか?+ブレーキング条件を使用することは知ってwhile(true)いますが、これは私を超えています。

4

2 に答える 2

5

AcceptTcpClientブロックするものです。while (true)プロセスが終了するか、スレッドが中断されるか、例外がスローされるまで、は無限にループします。

于 2012-12-27T19:21:01.353 に答える
3

while(true)ブロッキングを行うのはそれではなく、AcceptTcpClient()です。これが起こることです:

  1. tcpListenerが開始されます。
  2. ループが開始されます(trueは常にtrueであるため)
  3. this.tcpListener.AcceptTcpClient()AcceptTcpClientはブロッキングメソッドであるため、が実行され、スレッドが停止します。
  4. 接続要求が行われると、ブロックはなくなり、TcpClientが変数クライアントとして返されます。
  5. クライアント用に新しいスレッドが作成されます
  6. ループは再びAcceptTcpClientに戻り、新しい接続が確立されるまでそこで停止します。
于 2012-12-27T19:26:41.713 に答える