迷一样的EndAcceptTcpClient。深坑!该如何解决

迷一样的EndAcceptTcpClient。深坑!
迷一样的EndAcceptTcpClient。

1)从字面上看应该是结束‘“TcpClient”。
2)而从MSDN的解释看,又看不懂了。
引用
TcpListener.EndAcceptTcpClient 方法
异步接受传入的连接尝试,并创建新的 TcpClient 来处理远程主机通信。

3)MSDN又说它是阻塞性语句,会阻止。。。往下运行。

这个EndAcceptTcpClient 到底肿么了?
------解决思路----------------------
EndAcceptTcpClient 是和BeginAcceptTcpClient配套使用的
他们是AcceptTcpClient的异步版本
------解决思路----------------------
引用:
引用
简单的讲就是:
BeginXXX方法创建一个新线程并在线程中调用你传入的CallBack
你在CallBack里调用EndXXX方法来阻塞新创建的线程直到XXX操作完成

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

你在调用BeginAcceptTcpClient()方法加上后面循环输出数字,你看数字有没?
------解决思路----------------------
引用:
迷一样的EndAcceptTcpClient。

1)从字面上看应该是结束‘“TcpClient”。
2)而从MSDN的解释看,又看不懂了。
引用
TcpListener.EndAcceptTcpClient 方法
异步接受传入的连接尝试,并创建新的 TcpClient 来处理远程主机通信。

3)MSDN又说它是阻塞性语句,会阻止。。。往下运行。

这个EndAcceptTcpClient 到底肿么了?


它是结束Accept,这才是重点词,而不是TcpClient。不过最重要地,应该重点非重点都搞懂,不要只看一点来代替其它。

这个方法接受 BeginAcceptTcpClient 所返回的连接对象作为参数(在例子中通常用名为ar的参数),这个函数返回一个 TcpClient 对象。

它会阻塞当前线程执行。所以你在I/O线程回调你的方法中才调用它,那么你的线程就不至于“死”在这里了,因为I/O线程转备好了连接之后才会恰好回调你的方法。
------解决思路----------------------
引用:
Accept不要用异步模式,既复杂又不可靠。
不可靠指响应时间不可靠,在并发较大的时候容易出现丢弃客户端的问题。

你这个说法很成问题
既然微软提供了异步模式,必然是可以用的
你所说的并发较大时可能丢弃客户端,如果用同步,是不会丢弃,但是所有用户一起卡顿,难道那就不是问题吗