while ( true )
            {
               displayTextBox.Text = "Waiting for connection\r\n";               // accept an incoming connection
     语句A:    connection = listener.AcceptSocket();               // create NetworkStream object associated with socket
               socketStream = new NetworkStream( connection );               // create objects for transferring data across stream
               writer = new BinaryWriter( socketStream );
               reader = new BinaryReader( socketStream );               displayTextBox.Text += "Connection " + counter +
                  " received.\r\n";
               ... ...
--------------------------------------------------------------------------------
以上的while循环中。“语句A”执行后是在等待SOCKET链接吗?它下面的语句为什么不执行了??

解决方案 »

  1.   

    没有客户端请求的话,他就一直在这等着.MSDN:
    AcceptSocket 是一个阻塞方法,它返回可用来发送和接收数据的 Socket。如果希望避免阻塞,您可以使用 Pending 方法来确定传入连接队列中是否有连接请求。返回的 Socket 是使用远程主机的 IP 地址和端口号初始化的。您可以使用 Socket 类中任何可用的 Send 和 Receive 方法与远程主机进行通信。使用 Socket 后,请确保调用其 Close 方法。如果应用程序相对简单,请考虑使用 AcceptTcpClient 方法代替 AcceptSocket 方法。TcpClient 提供了一些通过网络在阻塞同步模式下发送和接收数据的简单方法。
      

  2.   

    “语句A”是所谓同步的,就是等到有远程计算机连接到本机,建立连接后才会运行下面的程序,即程序的运行与基础Socket同步。此前该线程处于阻塞状态。
    .net 另有一套方法是所谓异步的,就是无论有没有连接,都继续执行下面的程序,即程序与基础socket是各跑各的,并不“同步”