问题描述:
对于C# Socket没有超时设置的选项,默认情况下进行Socket连接,返回连接失败需要20-30s时间,严重影响用户体验
问题解决:
Socket服务器端:
Socket客户端:
IAsyncResult.AsyncState 返回一个对象,该对象时启动异步操作的方法的最后一个参数
注:
在Socket客户端进行超时连接的设置,异步连接,设置连接处理的回调函数,以及超时的处理。
ManualResetEvent的WaitOne(TimeSpan, Boolean)起到了主要的作用。它将阻止当前线程,直到ManualResetEvent对象被Set或者超过timeout时间。上面的代码中,调用BeginConnect后通过WaitOne方法阻止当前线程,如果在timeoutMSec时间内连接成功,将在CallBackMethod回调中调用TimeoutObject.Set,解除被阻塞的连接线程并返回;否则,连接线程会在等待超时后,主动关闭连接并抛出TimeoutException。
参考资料:
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
源程序文件:


来源:https://www.cnblogs.com/luosongchao/p/3397080.html

![clipboard[1] clipboard[1]](https://images0.cnblogs.com/blog/440499/201310/30161944-61564b6feef349bd9ea3af8e2cfd1788.png)
![clipboard[2] clipboard[2]](https://images0.cnblogs.com/blog/440499/201310/30161945-5c6a55603f2442acb3aabf8473452c6b.png)
![clipboard[3] clipboard[3]](https://images0.cnblogs.com/blog/440499/201310/30161945-69583dae10474c0e83f9424891b9e029.png)
![clipboard[4] clipboard[4]](https://images0.cnblogs.com/blog/440499/201310/30161946-9486b32b474948368da0373a88fd0c8f.png)
![clipboard[5] clipboard[5]](https://images0.cnblogs.com/blog/440499/201310/30161947-b7217e4c0ceb419088bfbf8f70d5fd73.png)