问题描述:html
对于C# Socket没有超时设置的选项,默认状况下进行Socket链接,返回链接失败须要20-30s时间,严重影响用户体验服务器
问题解决:异步
Socket服务器端:函数
Socket客户端:线程
IAsyncResult.AsyncState 返回一个对象,该对象时启动异步操做的方法的最后一个参数3d
注:code
在Socket客户端进行超时链接的设置,异步链接,设置链接处理的回调函数,以及超时的处理。htm
ManualResetEvent的WaitOne(TimeSpan, Boolean)起到了主要的做用。它将阻止当前线程,直到ManualResetEvent对象被Set或者超过timeout时间。上面的代码中,调用BeginConnect后经过WaitOne方法阻止当前线程,若是在timeoutMSec时间内链接成功,将在CallBackMethod回调中调用TimeoutObject.Set,解除被阻塞的链接线程并返回;不然,链接线程会在等待超时后,主动关闭链接并抛出TimeoutException。对象
参考资料:blog
http://www.cnblogs.com/weidagang2046/archive/2009/02/07/1385977.html
http://www.codeproject.com/Articles/31514/Implementation-of-Connecting-a-Socket-with-Timeout
http://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent(v=vs.95).aspx
C# Socket异步通讯:
http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html
http://www.cnblogs.com/sunev/archive/2012/08/07/2625688.html
源程序文件: