只知道BeginAcceptTcpClient、EndAcceptTcpClient 是一对好东西。
可是不会灵活使用啊。

解决方案 »

  1.   

    EndAcceptTcpClient 是和BeginAcceptTcpClient配套使用的
    他们是AcceptTcpClient的异步版本
      

  2.   

    简单的讲就是:
    BeginXXX方法创建一个新线程并在线程中调用你传入的CallBack
    你在CallBack里调用EndXXX方法来阻塞新创建的线程直到XXX操作完成
      

  3.   

    谢谢superliu1122
    那如何验证是创建了一个新线程? 
      

  4.   

    谢谢superliu1122
    那如何验证是创建了一个新线程? 
    你在调用BeginAcceptTcpClient()方法加上后面循环输出数字,你看数字有没?
      

  5.   

    3)MSDN又说它是阻塞性语句,会阻止往下运行。这个EndAcceptTcpClient 到底肿么了?它是结束Accept,这才是重点词,而不是TcpClient。不过最重要地,应该重点非重点都搞懂,不要只看一点来代替其它。这个方法接受 BeginAcceptTcpClient 所返回的连接对象作为参数(在例子中通常用名为ar的参数),这个函数返回一个 TcpClient 对象。它会阻塞当前线程执行。所以你在I/O线程回调你的方法中才调用它,那么你的线程就不至于“死”在这里了,因为I/O线程转备好了连接之后才会恰好回调你的方法。
      

  6.   

    如果你要“何验证是创建了一个新线程”,可以把你的主线程一直阻塞着,例如写 Sleep(5000),你可以看到在这个5秒钟到期之前,它就已经被回调处理完了。
      

  7.   

    异步编程模型已经不是最佳实践了,建议使用基于任务的异步模式。参见TcpClient.AcceptTcpClientAsync
      

  8.   

    http://msdn.microsoft.com/zh-cn/magazine/dn605876.aspx
    异步 TCP 套接字http://msdn.microsoft.com/library/hh873175
    基于任务的异步模式 (TAP)太多需要学习的知识。
      

  9.   

    Accept不要用异步模式,既复杂又不可靠。
    不可靠指响应时间不可靠,在并发较大的时候容易出现丢弃客户端的问题。
      

  10.   

    幸好你不是用的同步Accept,否则可能连操作系统都一起卡了.