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 回答